题目链接
题目(简单)
0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
示例
示例 1:
输入:num = 7, target = 4
输出:1
示例 2:
输入:num = 12, target = 5
输出:0
提示:
- 1 <= num <= 10^5
- 1 <= target <= 10^6
题解
数学+迭代
- 时间复杂度 O(n) : 状态转移循环 n−1 次使用 O(n)时间,状态转移方程计算使用 O(1) 时间;
- 空间复杂度 O(1) : 使用常数大小的额外空间;
/**
* @param {number} num
* @param {number} target
* @return {number}
*/
var lastRemaining = function(num, target) {
let res = 0;
// 最后一轮剩下2个人,所以从2开始反推
for (let i = 2; i <= num; i++) {
res = (res + target) % i;
}
return res;
};