
LeetCode:剑指 Offer 62. 圆圈中最后剩下的数字
发布日期:2022-09-10 02:24:52
浏览次数:5
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2023年09月03日 02时18分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
memset memcpy
2019-03-07
c++ memcpy 快
2019-03-07
c++ strcat
2019-03-07
c++ 冒泡排序、鸡尾酒
2019-03-07
c/c++ 崩溃原因。
2019-03-07
构造函数不写业务逻辑
2019-03-07
window nginx 配置
2019-03-07
dll热更新
2019-03-07
c++ 链表 详解 for应用
2019-03-07
svnadmin 不是内部命令 一招搞定
2019-03-07
error LNK2001: 无法解析的外部符号 “public: virtual
2019-03-07
c++ 自动增长数组 动态数组
2019-03-07
当前不会命中断点,还没有为文档加载任何符号。c++ vs
2019-03-07
程序优化进阶篇(适合各种编程语言)
2019-03-07
GDAL 拼接 镶嵌 投影 shp裁剪
2019-03-07
c++模板类静态成员初始化
2019-03-07
去除百度地图logo
2019-03-07
c++ 信息雨
2019-03-07
【设计模式之禅】六大原则的解读
2019-03-07