【问题描述】 面试题62. 圆圈中最后剩下的数字

0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3
输出: 3
示例 2:输入: n = 10, m = 17
输出: 2

【解答思路】

1. 暴力法
  • 元素插进列表
  • 每次移动m-1,删除所在元素,list长度n-1
    时间复杂度:O(N^2) 空间复杂度:O(N)
    public int lastRemaining(int n, int m) {ArrayList<Integer> list = new ArrayList<>(n);for (int i = 0; i < n; i++) {list.add(i);}int idx = 0;while (n > 1) {idx = (idx + m - 1) % n;list.remove(idx);n--;}return list.get(0);}作者:sweetieeyi
链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/javajie-jue-yue-se-fu-huan-wen-ti-gao-su-ni-wei-sh/
2. 数学方法

-约瑟夫环
-倒推
时间复杂度O(N)

class Solution {public int lastRemaining(int n, int m) {int ans = 0;// 最后一轮剩下2个人,所以从2开始反推for (int i = 2; i <= n; i++) {ans = (ans + m) % i;}return ans;}
}作者:sweetieeyi
链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/javajie-jue-yue-se-fu-huan-wen-ti-gao-su-ni-wei-sh/

【总结】

  1. LinkedList vs ArrayList
    LinkedList 时间复杂度 O(nm) 删除指定节点 O(n) (从头到尾遍历) 大量非连续性地址访问 ->超时
    ArrayList 时间复杂度 O(n^2) 删除指定元素 O(n) (需要移动) 内存连续空间的拷贝-> 勉强合格
  2. 数学公式无需记住 关键是掌握推导过程

链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/javajie-jue-yue-se-fu-huan-wen-ti-gao-su-ni-wei-sh/

[剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]相关推荐

  1. 《剑指 Offer I》刷题笔记 51 ~ 61 题

    <剑指 Offer I>刷题笔记 51_60 位运算(简单) 51. 二进制中 1 的个数 _解法1:逐伟判断 解法2:巧用 n&(n-1) 52. 不用加减乘除做加法(背题) 解 ...

  2. 《剑指 Offer I》刷题笔记 41 ~ 50 题

    <剑指 Offer I>刷题笔记 41_50 排序(中等) 41. 最小的k个数# _解法1:排序 API + 数组复制 API 42. 数据流中的中位数 _解法1:暴力 搜索和回溯算法( ...

  3. 《剑指 Offer I》刷题笔记 20 ~ 30 题

    <剑指 Offer I>刷题笔记 20_30 动态规划(简单) 20. 斐波那契数列 _解法1:迭代 解法2:记忆化递归 解法3:动态规划 21. 青蛙跳台阶问题 _解法1:动态规划 22 ...

  4. 《剑指 Offer I》刷题笔记 11 ~ 19 题

    <剑指 Offer I>刷题笔记 11 ~ 19 题 查找算法(中等) 11. 二维数组中的查找 _解法 1:暴力迭代 解法 2:标志数 解法 3:逐行二分 12. 旋转数组的最小数字 _ ...

  5. 《剑指 Offer I》刷题笔记 1 ~10 题

    <剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...

  6. 【剑指Offer】俯视50题之31 - 40题

    [剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...

  7. 牛客网剑指offer编程实践1-10题

    牛客网剑指offer编程实践1-10题 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...

  8. 【重点】剑指offer——面试题62:序列化二叉树

    剑指offer--面试题62:序列化二叉树 Solution1: 参考网址:https://www.nowcoder.com/profile/6475323/codeBookDetail?submis ...

  9. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

最新文章

  1. 如何使用UI技术提升租房类APP的看房体验?
  2. Java编程学习并不难,有坚持的动力与良好的心态尤为重要
  3. UEditor 如何进行二次开发
  4. 大规模分布式系统资源管理(一)
  5. 刚看到另外一个育儿作者收入是我的3000倍
  6. cookie、session、sessionid 与jsessionid之间的关系
  7. QT 实现采集即时音频信号并发送至另一台电脑播放
  8. crypto661-rabin(网鼎杯2022-未完成)
  9. python打印列表的下标和值的例子:
  10. Unity3D进行项目build时的“Data folder not found”问题
  11. android 实现 bilili 动画播放效果
  12. 关于Chandrashekhar阿扎德概述
  13. 万兴剪刀手去水印教程_万兴神剪手怎么去水印教程,赶快收藏吧
  14. mongdb 下载慢,解决
  15. 【python】-- paramiko、跳板机(堡垒机)
  16. probe request帧结构_WIFI探针原理
  17. High Resolution Melting (HRM) analysis
  18. wave.Error: unknown format: 3解决方法
  19. 强化学习3:蒙特卡洛和时序差分
  20. java中void和int的意思_c语言void和int的区别

热门文章

  1. 《一线架构师实践指南》—— 读后总结
  2. Cocoa编程学习笔记一
  3. openSUSE 13.1 Milestone 2 发布
  4. 【推荐】“水果”公司的复兴 (乔布斯和苹果公司)---Google黑板报
  5. jeesite的junit,数据没有插入?
  6. vue报错 TypeError: merge is not a function
  7. Android ViewPager指示器
  8. 小程序原生组件调用mpvue父组件方法
  9. 2020计算机领域前沿热门技术,CFP: ICPCSEE 2020 (SCI or EI Indexd) 第6届国际计算机前沿大会...
  10. html4废弃了哪些元素,HTML中的一些废弃元素_html