剑指offer_62_圆圈中最后剩下的数字【javascript】

62 阅读1分钟

题目链接

leetcode.cn/problems/yu…

题目(简单)

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;
};