约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题
public class Solution {
// 左神解法,本题本质还是报数为m-1的倍数的人死。求最后一个活着的人是初始时候的哪个人
/* 报数(A) 实际人员编号(B)
0 0
. .
. .
n-1 n-1
n 0
则可知B = A % n
同时,当杀了一个人之后,杀人前记为before,杀人后记为after.
before after
k (k < n) (没有了,因为被杀后变为n-1个人了)
k+1 0
. .
. .
n-2 n-k-3
0 n-k-2
. .
. .
k-1 n-2
符合公式before = (after + k + 1) % n
可知,最后一个活着的人为0号,因此可以利用逆推的方法求得活着的那个人。*/
public int LastRemaining_Solution(int n, int m) {
if (n < 1 || m < 1) {
return -1;
}
int live = getLive(n, m);
return live;
}
public int getLive(int n, int m) {
if (n == 0) {
return 0;
}
return (getLive(n - 1, m) + m) % n;
}
转载于:https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7399300.html
约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题相关推荐
- 剑指offer——圆圈中最后剩下的数字
1.如果通过环形列表去模拟圆圈的话,最后时间复杂度为O(mn),而且还需要一个辅助链表来模拟圆圈,空间复杂度为O(n). 2.通过找出递推公式的方法,求得递推公式为 时间复杂度为O(n),空间复杂度为 ...
- 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例
本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...
- 丢手帕问题 java_java基于双向环形链表解决丢手帕问题的方法示例
导读热词 本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解 ...
- 【LeetCode】剑指 Offer 40. 最小的k个数
[LeetCode]剑指 Offer 40. 最小的k个数 文章目录 [LeetCode]剑指 Offer 40. 最小的k个数 一.笨比解法 二.堆排序 三.快速选择 总结 一.笨比解法 选择排序变 ...
- 剑指offer 矩阵中的路径 @python
剑指offer 矩阵中的路径 @python 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...
- 【Java】 剑指offer(40) 最小的k个数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...
- 《剑指offer》最小的k个数
题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析:剑指offer刷到现在,大家可能都有个很大的感触,那就是要非常熟 ...
- 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 最小的k个数 java_【Java】 剑指offer(40) 最小的k个数
本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思 ...
最新文章
- 【目标检测】(6) YOLOV2 目标检测在V1基础上的改进
- Mac OS X下Maven的安装与配置
- 实验数据:将甲醛和亚硝酸的模拟分子网络分别计算100次的结果
- [深度应用]·实战掌握Dlib人脸识别开发教程
- 因xhost命令和DISPLAY环境变量操作不当导致无法启动Oracle图形化安装界面
- Skywalking部署常见问题以及注意事项
- 蓝桥杯第八届省赛JAVA真题----字母组串
- ubuntu中flashcache使用教程
- 用命令来操作vSphere:十一 PowerCLI命令--虚拟机操作
- [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画
- Ubuntu如何安装deb包 使用 dpkg解决依赖性问题
- 设计模式-Decorator装饰模式
- 算法: 最大正方形面积221. Maximal Square
- CMU 15-213 Introduction to Computer Systems学习笔记(20) Concurrent Programming
- 什么是网络分析仪?它的重要技术指标有哪些?
- C语言-求一元二次方程的解-你是否会了呢?
- RabbitMQ 开发时指定消息消费者的方式
- 上汽集团 java_【上汽集团工资】研发工程师待遇-看准网
- 51信用卡两道编程题
- LeetCode第78题解析