[剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]
【问题描述】 面试题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/
【总结】
- LinkedList vs ArrayList
LinkedList 时间复杂度 O(nm) 删除指定节点 O(n) (从头到尾遍历) 大量非连续性地址访问 ->超时
ArrayList 时间复杂度 O(n^2) 删除指定元素 O(n) (需要移动) 内存连续空间的拷贝-> 勉强合格
- 数学公式无需记住 关键是掌握推导过程
链接: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]相关推荐
- 《剑指 Offer I》刷题笔记 51 ~ 61 题
<剑指 Offer I>刷题笔记 51_60 位运算(简单) 51. 二进制中 1 的个数 _解法1:逐伟判断 解法2:巧用 n&(n-1) 52. 不用加减乘除做加法(背题) 解 ...
- 《剑指 Offer I》刷题笔记 41 ~ 50 题
<剑指 Offer I>刷题笔记 41_50 排序(中等) 41. 最小的k个数# _解法1:排序 API + 数组复制 API 42. 数据流中的中位数 _解法1:暴力 搜索和回溯算法( ...
- 《剑指 Offer I》刷题笔记 20 ~ 30 题
<剑指 Offer I>刷题笔记 20_30 动态规划(简单) 20. 斐波那契数列 _解法1:迭代 解法2:记忆化递归 解法3:动态规划 21. 青蛙跳台阶问题 _解法1:动态规划 22 ...
- 《剑指 Offer I》刷题笔记 11 ~ 19 题
<剑指 Offer I>刷题笔记 11 ~ 19 题 查找算法(中等) 11. 二维数组中的查找 _解法 1:暴力迭代 解法 2:标志数 解法 3:逐行二分 12. 旋转数组的最小数字 _ ...
- 《剑指 Offer I》刷题笔记 1 ~10 题
<剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...
- 【剑指Offer】俯视50题之31 - 40题
[剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...
- 牛客网剑指offer编程实践1-10题
牛客网剑指offer编程实践1-10题 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...
- 【重点】剑指offer——面试题62:序列化二叉树
剑指offer--面试题62:序列化二叉树 Solution1: 参考网址:https://www.nowcoder.com/profile/6475323/codeBookDetail?submis ...
- 剑指offer java版 test3—从尾到头打印链表
标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...
最新文章
- 如何使用UI技术提升租房类APP的看房体验?
- Java编程学习并不难,有坚持的动力与良好的心态尤为重要
- UEditor 如何进行二次开发
- 大规模分布式系统资源管理(一)
- 刚看到另外一个育儿作者收入是我的3000倍
- cookie、session、sessionid 与jsessionid之间的关系
- QT 实现采集即时音频信号并发送至另一台电脑播放
- crypto661-rabin(网鼎杯2022-未完成)
- python打印列表的下标和值的例子:
- Unity3D进行项目build时的“Data folder not found”问题
- android 实现 bilili 动画播放效果
- 关于Chandrashekhar阿扎德概述
- 万兴剪刀手去水印教程_万兴神剪手怎么去水印教程,赶快收藏吧
- mongdb 下载慢,解决
- 【python】-- paramiko、跳板机(堡垒机)
- probe request帧结构_WIFI探针原理
- High Resolution Melting (HRM) analysis
- wave.Error: unknown format: 3解决方法
- 强化学习3:蒙特卡洛和时序差分
- java中void和int的意思_c语言void和int的区别
热门文章
- 《一线架构师实践指南》—— 读后总结
- Cocoa编程学习笔记一
- openSUSE 13.1 Milestone 2 发布
- 【推荐】“水果”公司的复兴 (乔布斯和苹果公司)---Google黑板报
- jeesite的junit,数据没有插入?
- vue报错 TypeError: merge is not a function
- Android ViewPager指示器
- 小程序原生组件调用mpvue父组件方法
- 2020计算机领域前沿热门技术,CFP: ICPCSEE 2020 (SCI or EI Indexd) 第6届国际计算机前沿大会...
- html4废弃了哪些元素,HTML中的一些废弃元素_html