LeetCode:剑指 Offer 62. 圆圈中最后剩下的数字
发布日期:2022-09-10 02:24:52 浏览次数:8 分类:技术文章

本文共 660 字,大约阅读时间需要 2 分钟。

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

解题思路

1.经典约瑟夫环问题,递推公式为:f(n) = (f(n - 1) + m) % n

2.根据规律可以发现,最后剩下的数字(假设为X)的位置向左移动了 m 位,也就是减少了 m,所以逆推 X 的位置时就要加上 m 就是公式中的 f(n) = (f(n - 1) + m) % n
3.注意:n 是会随着个数的变化而改变,当 + m 后超过当前的总个数 n 时,需要回到队头重新计数,即需要进行取模运算

代码

/** * @param {number} n * @param {number} m * @return {number} */var lastRemaining = function(n, m) {
let res = 0; for(let i = 2; i <= n; i++){
res = (res + m) % i; } return res;};

转载地址:https://blog.csdn.net/Bertil/article/details/124715818 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode:面试题 01.03. URL化
下一篇:LeetCode:剑指 Offer 55 - I. 二叉树的深度

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月06日 12时44分12秒