LeetCode:剑指 Offer 62. 圆圈中最后剩下的数字
发布日期:2022-09-10 02:24:52
浏览次数:10
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年09月15日 18时38分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
TensorFlow初学者必须了解的55个经典案例
2019-05-24
机器学习笔记
2019-05-24
数十种TensorFlow实现案例汇集:代码+笔记
2019-05-24
python记录的错误与知识
2019-05-24
内核中各种套接字的关系
2019-05-24
c++ typedef 函数指针的用法
2019-05-24
函数重载是什么意思?它与虚函数的概念有什么区别?
2019-05-24
链表:利用二级指针删除单向链表
2019-05-24
数组指针和指针数组的区别
2019-05-24
常量指针与指针常量的区别
2019-05-24
求二叉树的高度(非递归) .----美团二面=----硬伤 当时没有答上来
2019-05-24
面试总结 --系统
2019-05-24
c++ virtual 实例分析
2019-05-24
c++ 析构函数为虚函数 可以防止内存泄露
2019-05-24
c++ 内联函数
2019-05-24
c++ 抽象类 纯虚函数
2019-05-24
C++ 虚函数 笔试题目--绿盟科技
2019-05-24
c++ 内存管理:5、指针参数是如何传递内存的
2019-05-24
c++ 内存管理:6、杜绝“野指针”
2019-05-24
c++ 内存管理:7、有了malloc/free为什么还要new/delete?
2019-05-24