大佬,牛!!!

  • 题目:给定一个n,然后从1开始删除元素,各一个删一个,一直到n,然后再反向删除,也是各一个删一个,都是从剩下的元素中的第一个开始删除,最终数组剩下一个元素,返回这个元素即可。[1, 2, 3, 4, 5, 6, 7, 8, 9]->[2, 4, 6, 8]->[2, 6]->[6]。
  • 我的思路:我是真的向构建一个数组了,然后看了n的范围1-10的9次方,瞬间直接放弃。遇到这种数学相关的,就比较难受,哎。然后还有一个规律需要发现一下,第一次没间隔1个数字就删除一个,第二次的是间隔两个,第三次是4个。
  • 大佬的思路:
    • 首先我们每一行弄完之后,剩下的都是一个等差数列,我们返回的一定是这个等差数列的a1,这一点一定要明确。看一下举例,我们最后剩下2,6,然后删除2之后,还剩下6,这个可以自己称为一个等差数列,他就是a1。至于为什么需要删除2,是因为第一个箭头是从左向右删除,第二个箭头是从右向左,第三个又是从左向右。
    • 然后我们换个例子,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]->[2,4,6,8,10,12,14,16,18]->[4,8,12,16]->[8,16]->[8]
    • 然后再加上我能看到的那个规律,第一次间隔1个删除,第二次间隔2个删除,第三次间隔4个删除…,所以呢,第二个等差数列的a1是第一个a1+1=2,其实就是加了第一次的间隔;第三个等差数列的a1是之前的a1+2,其实就是加了第二次的间隔。
    • 然后再看最上面的例子,什么第三个数组[2,6],还是2,没有+间隔,主要是因为,我们再从[2, 4, 6, 8]->[2, 6]的时候,最开始的2并没有被删除,而[2,4,6,8,10,12,14,16,18]->[4,8,12,16]的时候,最开始的2是被删除了,那有啥区别呢,可以看到[2, 4, 6, 8]的时候,还剩下4(偶数)个数,而[2,4,6,8,10,12,14,16,18]剩下了9(奇数)个数,这样就明白了把。从左向右的时候是不需要考虑的,因为我们的下一个数组一定是自身加上间隔,但是从右向左的时候一定是要考虑的,我们需要看看之前的a1是不是被删除了,如果没有被删除,则他还是a1,如果删除了,那么就变成了a1+step。
  • 技巧:
    • 技巧就是等差数列吧,然后返回的是a1,这个技巧就是数学相关的了。哎,难受。
    • 还有就是,没遍历依次,剩下的元素的个数一定是int(之前的个数/2)。

伪代码

记录第一个等差数列的a1,也就是1
记录向左还是向右遍历,因为在向右的时候,会有特殊情况的。第一次是向右
记录间隔step,第一次的时候间隔是1
记录元素个数,cnt,第一次的时候一定是n
while循环,只要cnt不是1。一次while就是一行的删除如果是向右的话,下一个a1一定是现在的a1+间隔step如果是向左的话,需要判断,现在还有多少个元素,如果是偶数个则还是a1,否则就变成了a1+step。因为偶数的时候,上一个的a1是不被删除的。方向反转cnt要/2step要*2
return a1即可

java代码

class Solution {public int lastRemaining(int n) {int a1 = 1;// 每个等差数列的第一个元素boolean isToRigth = true;// 是不是向右int cnt = n;// 元素个数int step = 1;// 下一个等差数列的a1和本次等差数列a1的位置之间的距离,每次这个step都需要*2while (cnt > 1) {// 一个while就是一行的遍历if (isToRigth) {// 向右,则下一个等差数列的a1是a1+stepa1 = a1 + step;} else {// 向左,则下一等差数列的a1还是a1+step,// 但是这时候有个特殊情况,就是如果当前是偶数的话,a1还是a1,因为删除的节点是a1+step,而a1不删除a1 = (cnt % 2 == 0) ? a1 : a1 + step;}isToRigth = !isToRigth;cnt /= 2;step *= 2;}return a1;}
}
  • 总结:这个题主要是结合了数学,然后技巧性比较高,并且还右一些判断。我是真的我从下手,忍不住了,大佬,牛!!!

LeetCode——390.消除游戏相关推荐

  1. [LeetCode]390.消除游戏

    [LeetCode]390.消除游戏 题目 示例 方法 模拟 题目 列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序.请你对 arr 应用下述算法: 从左到右,删除第一个数字, ...

  2. Java实现 LeetCode 390 消除游戏

    390. 消除游戏 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数 ...

  3. LeetCode 390. 消除游戏

    ​​​​​​390. 消除游戏 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始 ...

  4. LeetCode 390. 消除游戏(类似约瑟夫环,找映射规律)

    1. 题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删 ...

  5. Leetcode 390.消除游戏

    题目地址 思路 第一种方法肯定是遍历,暴力删除,但是数据量一大就容易超时. 第二种方法,我们想到利用等差数列来进行模拟. 我们定义首项a0,公差为d,项数为size. 其中公差每次都是翻倍,项数每次都 ...

  6. LeetCode:390. 消除游戏————中等

    题目 390. 消除游戏 列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序.请你对 arr 应用下述算法: 从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾 ...

  7. 390. 消除游戏(约瑟夫环)

    390. 消除游戏 列表 arr 由在范围 [1, n]中的所有整数组成,并按严格递增排序.请你对 arr 应用下述算法: 从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾. 重复 ...

  8. leetcode 390. Elimination Game | 390. 消除游戏(Java)

    题目 https://leetcode.com/problems/elimination-game/ 题解 方法1:模拟(内存超出限制) 最朴素的思路,模拟每一轮的消除,直到剩余大小为 1 为止. 此 ...

  9. 【LeetCode】390. 消除游戏

    题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...

最新文章

  1. 39.拖曳排序插件——sortable
  2. Skaffold:让K8S开发工作变得简单
  3. 硬RAID可以为NVMe SSD数据可靠性保驾护航吗?
  4. 宏信建发IT信息部门-大数据-HR面试
  5. html 使用ajax php函数吗,php – 为什么用AJAX加载html后jQuery更改函数不起作用?
  6. 数学史思维导图_【学科活动】思维导图展风采,数学文化提素养——庆云县第四中学(北校区)四年级数学组活动小记...
  7. python如何连接sql server数据库_Python连接SQLServer数据库
  8. YUV 格式与 RGB 格式的相互转换公式总结(C++版)
  9. 框架-vue-cli
  10. 河南省旅馆业信息化管理实现“人证核验、无证入住”系统全覆盖
  11. 常微分方程 伍卓群 题目
  12. Pycharm selenium webdriver自动化禅道测试
  13. 【现成工具】java获取国家法定节假日包含指定月份节假日和周末
  14. 观点动力学模型:主要理论与模型综述
  15. 【更新公告】AirtestPoco更新
  16. 与、或、非、同或、异或、蕴含的表示 C/C++
  17. 线性时不变系统——信号系统学习笔记
  18. 海伦公式和鞋带公式求三角形的面积
  19. 怎样基于power supply class编写PSY driver
  20. 新版标准日本语中级_第二十四课

热门文章

  1. UE4 材质 溶解材质
  2. Java 中各种DTO,POJO 等的概念
  3. bootrom的类型
  4. 【研一小白论文精读】《Big Self-Supervised Models are Strong Semi-Supervised Learners》
  5. Android简单实现计时和倒计时
  6. qq农场 源码java_HappyFarm 仿QQ农场游戏源代码 - 下载 - 搜珍网
  7. 20款免费项目管理系统推荐
  8. c语言编程符号函数sgn,在C/C中是否有标准符号函数(signum,sgn)?
  9. 一种提取HTML网页正文的方法
  10. 抖音橱窗和抖音小店有什么区别?四和能聚分析抖音电商两种模式