圆圈中最后剩下的数
描述
0,1,…,n-1 这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
代码 (Java)
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if (n < 1 || m < 1)
return -1;
int last = 0;
for (int i = 2; i <= n; ++i)
last = (last + m) % i;
return last;
}
}
思路
- 本题直接用链表或者列表模拟这个删除的过程也是可以的,只不过时间复杂度是O(nm),上面的代码是O(n),思路需要根据数学推导,可以看原书中的解释。