题目

列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:

从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。
重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。
不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。
给你整数 n ,返回 arr 最后剩下的数字。

示例 1:

输入:n = 9
输出:6
解释:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = [2, 4, 6, 8]
arr = [2, 6]
arr = [6]
示例 2:

输入:n = 1
输出:1

提示:

1 <= n <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/elimination-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决思路

方法一:
我按照需求去写的代码 在LK没有通过 占用内存过大

方法二:
数学方法

解决方法

方法一:

    fun lastRemaining(n: Int): Int {//        val array = IntArray(n) { 1 + it }
//        val toMutableList = array.toMutableList()val mutableListOf = mutableListOf<Int>()for (i in 0 until n){mutableListOf.add(1 + i)}return helper(mutableListOf, true, mutableListOf())}fun helper(list: MutableList<Int>, left: Boolean, tempList: MutableList<Int>): Int {if (list.size == 1) {return list[0]}tempList.clear()if (left) {for (i in 1 until list.size step 2){tempList.add(list[i])}} else {for (i in list.size -2 downTo 0 step 2){tempList.add(list[i])}tempList.reverse()}list.clear()list.addAll(tempList)return helper(list, !left,tempList)}

方法二:

    /*** https://leetcode.cn/problems/elimination-game/solution/wo-hua-yi-bian-jiu-kan-dong-de-ti-jie-ni-k2uj/*/fun lastRemaining2(n: Int): Int {var head = 1var step = 1var curN = nvar left = truewhile (curN > 1){if (left || curN % 2 == 1){head += step}step *= 2curN /= 2left = !left}return head}

总结

1.数学问题就没办法了 真的是

2.我的办法是对的 但是就是慢 内存也占用了很多
数学的力量 实在是太强大了

3.感觉今天收获不大 因为此题面试的概率较小

4.我们对比一下:


fun main() {measureTimeMillis {println(TestArray141().lastRemaining2(10000000))}.also { println(it) }measureTimeMillis {println(TestArray141().lastRemaining(10000000))}.also { println(it) }
}输出:
6150102
0
6150102
2359

我们看到 两个算法结果是一样的 但是一个耗时0 一个耗时2359

算法---消除游戏(Kotlin)相关推荐

  1. H5 六边形消除游戏开发

    试玩地址,目前只适配pc端.源码 六边形游戏的鼻祖应该是这个 hex-frvr,原作者开发用的是 pixi 游戏引擎,本着快速开发的理念,本游戏采用 cocos creator,UI 延用 hex-f ...

  2. 第4-8课:方块消除游戏

    前面基础部分我们介绍过简单的串模型的动态规划,在这个系列中,我们又介绍了区间动态规划模型.状态压缩动态规划模型和线性动态规划模型.我们用的算法实现都是尽量使用状态递推关系式直接用递推的方法,大家可能都 ...

  3. H5 六边形消除游戏开发 1

    六边形游戏的鼻祖应该是这个 hex-frvr,原作者开发用的是 pixi 游戏引擎,本着快速开发的理念,本游戏采用 cocos creator,UI 延用 hex-frvr.学习过程中,有借鉴各路实现 ...

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

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

  5. 基于Unity3D技术的纸牌消除游戏

    基于Unity3D技术的纸牌消除游戏 1 项目的创建和资源的导入 在Project下创建好需要的四个文件夹,其中Resources文件夹是用来存放A-K和大小王正面纸牌资源,Textture文件夹用来 ...

  6. [LeetCode]390.消除游戏

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

  7. LeetCode刷题——消除游戏#390#Medium

    消除游戏的思路探讨与源码     消除游戏的题目如下图,该题属于递归类和数学类型的题目,主要考察对于数学方法的使用和递归方法的理解.本文的题目作者想到2种方法,分别是递归方法和数学模拟方法,其中递归方 ...

  8. LeetCode 390. 消除游戏

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

  9. 【leetcode】2022.1.2 消除游戏

    390. 消除游戏 分析 这题看完像是抓住了什么,但又像啥也没抓住. 当没有思路的时候,最好的解题思路就是先用最暴力最弱智的办法把它做出来,然后再进行优化. 暴力模拟法 - 真的弄出来个数组,按照他的 ...

最新文章

  1. iOS性能分析-Xcode Instruments Allocations 分析APP内存使用情况
  2. MySQL的EXPLAIN的SELECT TYPE
  3. Ignite Web 控制台(使用官方免费部署的控制台)
  4. 合并单元格两行_28 HTML5标签学习——table单元格的合并
  5. 腾讯云linux服务器怎么使用图形化界面_自己搭建一个自动签到和远程下载的服务器...
  6. 【论文解读】解读TRPO论文,深度强化学习结合传统优化方法
  7. 13.2.9 中间件
  8. linq Distinct
  9. gb酱油和gbt酱油哪个好_都是酱油,生抽好还是味极鲜好?老板:两者差别很大,别买错了...
  10. python对象的三个属性_Python 对象属性的访问
  11. 我的世界基岩版json_(1.8.0.13+)我的世界Minecraft【BE】基岩版 /function 使用教程
  12. Android Studio来了,它能取代Eclipse吗?
  13. linux ls 输出格式,(转)linux 中使用ls指定输出时间格式
  14. windows下批量更改文件后缀
  15. Windows客户端开发--URLDownloadToFile下载文件进度条
  16. HICE-SSH使用RSA认证方式进行登陆
  17. idea设置控制台字体大小
  18. echart.js给series,xAxis中的data动态赋值(三种方式)
  19. java 字符串限制长度吗_[Java教程]限制字符串长度
  20. 407. 接雨水 II【我亦无他唯手熟尔】

热门文章

  1. 500 Internal Privoxy Error
  2. css3 背景渐变色实现过渡效果
  3. win7系统sql找不到服务器,win7系统SQL SERVER2005本地无法连接服务器的解决方法
  4. 程序员做饭指南-凉拌
  5. KOF系列全人物第一时间不可防御技研究报告汇总引索贴
  6. 无法定位程序输入点__gxx_personality_sj0 于动态链接库libstdc++-6.dll
  7. 桌面两个IE图标其中一个无法删除的解决办法
  8. mac 访达指定目录
  9. [转]经验分享:我的JavaEE学习道路
  10. 图像去锯齿(降噪+插值)