[LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 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 <= n <= 10^5
1 <= m <= 10^6
思路:
题解:
/**
* 剑指 Offer 62. 圆圈中最后剩下的数字
*/
public int lastRemaining(int n, int m)
// f(n) = (f(n−1)+t)%n
// = (f(n−1)+m%n)%n
// = (f(n−1)+m)%n
int curIndex = 0;
// 最后一轮剩下 2 个人,所以从 2 开始反推
for (int i = 2; i <= n; i++)
// (当前 index + m) % 上一轮剩余数字的个数
curIndex = (curIndex + m) % i;
return curIndex;
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof
以上是关于[LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 725. 分隔链表 / 326. 3的幂 / 剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环问题)