1. 题目

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
还有 5727. 找出游戏的获胜者 https://leetcode-cn.com/problems/find-the-winner-of-the-circular-game/

我的博客 链表: 约瑟夫环问题

2. 解题

类似题目:LeetCode 390. 消除游戏(类似约瑟夫环,找映射规律)

2.1 数组模拟超时

极限数据下,超时了

class Solution {public:int lastRemaining(int n, int m) {vector<int> num(n);int i;for(i = 0; i < n; i++)num[i] = i;i = 0;while(num.size() != 1){i = (i+m-1)%num.size();num.erase(num.begin()+i);//不断的删除}return num[0];}
};

2.2 公式法

参考别人的解法

  • f(people,num)f(people,num)f(people,num) 表示在有people个人时,报数为num,胜利的人的位置
  • people = 1 时, pos = 0
  • pos=f(people,num)=(f(people−1,num)+num)%peoplepos = f(people,num) = (f(people-1,num)+num)\% peoplepos=f(people,num)=(f(people−1,num)+num)%people
class Solution {public:int lastRemaining(int n, int m) {int pos = 0;//1个人时for(int i = 2; i <= n; i++){  //i表示人数pos = (pos+m)%i;}return pos;}
};

剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)相关推荐

  1. 剑指offer 面试题62. 圆圈中最后剩下的数字

    0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字 ...

  2. 面试题62. 圆圈中最后剩下的数字

    面试题62. 圆圈中最后剩下的数字 思路:f(n,m) = (f(n-1,m)+m)%n.约瑟夫问题 写法1 class Solution { public:int lastRemaining(int ...

  3. LeetCode 面试题62. 圆圈中最后剩下的数字 详细题解

    面试题62. 圆圈中最后剩下的数字 难度 简单 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数 ...

  4. leetcode 面试题62. 圆圈中最后剩下的数字

    面试题62. 圆圈中最后剩下的数字 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个 ...

  5. 【剑指offer-Java版】45圆圈中最后剩下的数字

    圆圈中最后剩余的数字:约瑟夫环问题 0-n这n个数字排成一圈,从数字零开始每次从这个圆圈中删除第m个数字,求出剩余的最后一个数字 public class _Q45<T> {// 低效的模 ...

  6. leetcode —— 面试题62. 圆圈中最后剩下的数字

    0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字, ...

  7. 剑指offer:孩子们的游戏(圆圈中最后剩下的数)

    题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...

  8. 【LeetCode】剑指 Offer 62. 圆圈中最后剩下的数字

    [LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 文章目录 [LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 一.动态规划 总结 一.动态规划 构建一个长度为 n ...

  9. 【算法-剑指 Offer】62. 圆圈中最后剩下的数字(环形链表;约瑟夫环;动态规划)

    剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 发布:2021年9月12日12:18:52 问题描述及示例 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每 ...

最新文章

  1. 作为前端开发兼任产品专员是一种咋样的体验
  2. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
  3. scikit-learn 梯度提升树(GBDT)调参小结
  4. GridView导出Execl
  5. PHP 8 中确认支持 JIT!
  6. div 多列等高对齐
  7. 编译OpenJDK12:atomic.hpp: fatal error C1189: size_t is not WORD_SIZE(换了VS2017编译)
  8. javaweb不同用户登录不同页面的页面_ssh+mysql实现的Java web论坛系统源码附带视频指导运行教程...
  9. Google 展示广告
  10. Commit cannot be completed since the group has already rebalanced and assign
  11. CS224d-Day 2:TensorFlow 入门
  12. JavaScript之堆栈溢出
  13. LCD vs LED vs OLED
  14. 图像融合(Image Fusion)简介
  15. Linux查看目录大小文件大小内存大小硬盘大小
  16. 计算机二级Java考试笔记
  17. python发明家_Python版多图表范例
  18. OCR技术系列之一 字符识别技术总览
  19. 初学 STM32 (从 51 过度到 STM32 ,初学 STM32 必须了解的知识)
  20. zabbix自定义监控项-统计AP在线、离线数量(AC:H3C WX5540H)

热门文章

  1. redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用
  2. usg6000v 无法ping通_柯美复印机网络打印无响应?无法打印、扫描?原来这里出了问题...
  3. linux中timer的作用,linux - linux / timer.h setup_timer()到期功能不起作用? - 堆栈内存溢出...
  4. 假定Csomething是一个类,执行下面这些语句后,内存里创建了几个Csomething对象
  5. 第三季1:ORTP库的移植与局域网视频传输
  6. 驱动框架7——使用gpiolib完成led驱动
  7. uboot源码——内核启动分析
  8. caffe运行训练脚本时报错:Unknown bottom blob 'data' (layer 'conv1',bottom index 0)
  9. 2017模拟赛:还款计算
  10. 在线生成大全(这里真的什么都有)