题目

列表 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. 传统CV和深度学习方法的比较
  2. 用JS验证asp.net服务端控件
  3. Java多线程例子讲解
  4. java编写教师类输出_Java类和对象的区别和联系,超简单易懂!
  5. Java 中判断一个字符串是否包含另外一个字符串的方法
  6. 数格子算面积的方法_面试小学数学经典教案:《什么是面积》
  7. 创建数据库、表以及索引
  8. 商业智能BI如何推进制造业转型
  9. php怎么清空cookies,php cookie如何清除
  10. c语言发票的编码,关于增值税发票中商品税收分类编码对应的简称
  11. 【2020牛客寒假基础算法训练营】第六场总结
  12. windows 安装apex_《Apex英雄》:如何在你的PC上下载安装玩到它
  13. 如何获取任意小程序的AppId和页面路径?
  14. (附源码)计算机毕业设计SSM基于ETC用户的自驾游推荐系统
  15. Synopsys逻辑综合及DesignCompiler的使用
  16. FloatWindow-优雅实现Android悬浮窗
  17. 监控与日志的黄金法则
  18. 物联网基础知识介绍及常见的几种无线通讯方式和应用
  19. 【3D人脸】Mediapipe Vs Persona
  20. 吹着夏天的风,跟春天告别

热门文章

  1. 基于L2,1范数的特征选择方法
  2. 【邢不行|量化小讲堂系列56-实战篇】量化策略回测表现好,但实盘却很差?可能是底层数据就错啦!
  3. 服务器可以放在家里吗一定要放在机房托管吗
  4. XCTF-*CTF2022-Alice系列挑战write up
  5. sCrypt 合约中的椭圆曲线算法:第一部分
  6. android回退页面刷新页面数据
  7. 98拳皇(c)实现人物走动 释放技能
  8. 求两数之间的偶数或奇数的和.
  9. 》古文诗词:庄子·杂篇·列御寇
  10. Java基础语法-双色球彩票