解决leetcode第3782题交替删除操作后最后剩下的整数

3782.交替删除操作后最后剩下的整数

难度:困难

问题描述:

给你一个整数n。

我们将1到n的整数按从左到右的顺序排成一个序列。然后,交替地执行以下两种操作,直到只剩下一个整数为止,从操作1开始:

操作1:从左侧开始,隔一个数删除一个数。

操作2:从右侧开始,隔一个数删除一个数。

返回最后剩下的那个整数。

示例1:

输入:n=8

输出:3

解释:

写下序列1,2,3,4,5,6,7,8

从左侧开始,我们删除每隔一个数字:1,2,3,4,5,6,7,8。剩下的整数是1,3,5,7

从右侧开始,我们删除每隔一个数字:1,3,5,7。剩下的整数是3,7

从左侧开始,我们删除每隔一个数字:3,7。剩下的整数是3

示例2:

输入:n=5

输出:1

解释:

写下序列1,2,3,4,5

从左侧开始,我们删除每隔一个数字:1,2,3,4,5。剩下的整数是1,3,5

从右侧开始,我们删除每隔一个数字:1,3,5。剩下的整数是1,5

从左侧开始,我们删除每隔一个数字:1,5。剩下的整数是1

示例3:

输入:n=1

输出:1

解释:

写下序列1

最后剩下的整数是1。

提示:

1<=n<=1015

问题分析:

这个问题主要完成两个操作,一是从左侧开始,向右隔一个数删除一个数,并返回处理之后的结果。二是从右侧开始,向左隔一个数删除一个数,并返回处理之后的结果。这两个操作用python列表切片操作可以快速完成,设计的两个函数分别是operate_to_right(a)和operate_to_left(a)。然后通过这两个函数,构造循环对原始的列表交替进行删除操作,得到最后剩下的那个数,问题得到解决。

程序如下:

python 复制代码
#从列表a左侧开始,向右隔一个数删除一个数,返回处理之后的结果
def operate_to_right(a):
    return a[::2]

#从列表a右侧开始,向左隔一个数删除一个数,返回处理之后的结果
def operate_to_left(a):
    return a[::-2][::-1]

#主程序
n=int(input('pls input n='))
a=list(range(1,n+1))
while len(a)>1:
    b=operate_to_right(a)
    print(f'从{a}左侧开始,向右每隔一个数删除一个数字,剩下的整数是{b}')
    a=operate_to_left(b)
    print(f'从{b}右侧开始,向左每隔一个数删除一个数字,剩下的整数是{a}')
print(f'最后剩下的数字是{a[0]}')

运行实例一

pls input n=1

最后剩下的数字是1

运行实例二

pls input n=3

1, 2, 3左侧开始,向右每隔一个数删除一个数字,剩下的整数是1, 3

1, 3右侧开始,向左每隔一个数删除一个数字,剩下的整数是3

最后剩下的数字是3

运行实例三

pls input n=9

1, 2, 3, 4, 5, 6, 7, 8, 9左侧开始,向右每隔一个数删除一个数字,剩下的整数是1, 3, 5, 7, 9

1, 3, 5, 7, 9右侧开始,向左每隔一个数删除一个数字,剩下的整数是1, 5, 9

1, 5, 9左侧开始,向右每隔一个数删除一个数字,剩下的整数是1, 9

1, 9右侧开始,向左每隔一个数删除一个数字,剩下的整数是9

最后剩下的数字是9

相关推荐
小O的算法实验室7 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic8 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
聪明蛋子哟8 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust
Brilliantwxx8 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
今天AI了吗9 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
卷无止境9 小时前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像
后端·python·docker
空堂与归9 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
TELL5219 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
Csvn10 小时前
🐍 Day 4: Python 控制流 — 条件、循环与推导式的艺术
后端·python
动词ing10 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法