问题描述

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

代码

这是一个约瑟夫问题,需要倒推给出答案,因为最后的幸存者的数组大小为一,下标为0是固定的,我们开始反推:

  • step1.补上 3 个位置,然后模上当时的数组大小2,\((0+3)\%2 = 1\),这说明倒数第一轮在当时两个幸存者中幸存者的下标为1
  • step2.补上 3 个位置,然后模上当时的数组大小3,\((1+3)\%3 = 1\),这说明倒数第二轮在当时三个幸存者中幸存者的下标为1
  • step3.补上 3 个位置,然后模上当时的数组大小4,\((1+3)\%4 = 0\),这说明倒数第三轮在当时四个幸存者中幸存者的下标为0
  • step4.补上 3 个位置,然后模上当时的数组大小5,\((0+3)\%5 = 3\),这说明倒数第四轮在当时五个幸存者中幸存者的下标为3

    因为五个幸存者和总人数一致了,因此可推出最终幸存者在原先数组中的下标为3
class Solution {
public:
int lastRemaining(int n, int m) {
int i = 2,ans = 0;
while(i <= n)
{
ans = (ans+m)%i;
i++;
}
return ans;
}
};

结果

执行用时 :4 ms, 在所有 C++ 提交中击败了99.83%的用户
内存消耗 :5.8 MB, 在所有 C++ 提交中击败了100.00%的用户

《剑指offer》面试题62. 圆圈中最后剩下的数字的更多相关文章

  1. 【剑指Offer】孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python)

    [剑指Offer]孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-in ...

  2. Java实现 LeetCode 面试题62. 圆圈中最后剩下的数字(约瑟夫环)

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

  3. 【LeetCode】面试题62. 圆圈中最后剩下的数字

    题目:面试题62. 圆圈中最后剩下的数字 这题很有意思,也很巧妙,故记录下来. 官方题解思路,是约瑟夫环的数学解法: 我们将上述问题建模为函数 f(n, m),该函数的返回值为最终留下的元素的序号. ...

  4. [LeetCode]面试题62. 圆圈中最后剩下的数字(数学)

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

  5. 【LeetCode】面试题62. 圆圈中最后剩下的数字 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 约瑟夫环 日期 题目地址:https://leetco ...

  6. 【剑指Offer】46、圆圈中最后剩下的数

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

  7. 剑指Offer 46. 孩子们的游戏(圆圈中最后剩下的数) (其他)

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

  8. [剑指offer] 46. 孩子们的游戏(圆圈中最后剩下的数)

    题目描述 随机指定一个数m,让编号为0的小朋友开始报数.每次喊到m-1的那个小朋友要出列,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友 ...

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

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

随机推荐

  1. 音视频中的PTS和DTS及同步

    视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉.       但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都 ...

  2. Raft论文概述

    介绍 Raft是一种为了管理复制日志的一致性算法.为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举.日志复制和安全性.同时它通过实施一个更强的一致性来减少需要考虑的状态的数 ...

  3. JAVA中BufferedImage与byte[]转换

    BufferedImage转byte[] ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(imgBuff, ...

  4. Linux(centos7)安装ClickHouse

    Clickhouse 仅支持Linux 且必须支持SSE4.2 指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 suppo ...

  5. 『与善仁』Appium基础 — 27、模拟手势点击坐标

    目录 1.模拟手势点击坐标 2.tap()用法 3.练习 4.弊端 1.模拟手势点击坐标 在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点击元素所在位置的 ...

  6. React MobX 开始

    MobX 用于状态管理,简单高效.本文将于 React 上介绍如何开始,包括了: 了解 MobX 概念 从零准备 React 应用 MobX React.FC 写法 MobX React.Compon ...

  7. A ROBUST KERNEL PCA ALGORITHM

    目录 引 主要内容 问题一 问题二 Lu C, Zhang T, Du X, et al. A robust kernel PCA algorithm[C]. international confer ...

  8. [数学]高数部分-Part VI 重积分

    Part VI 重积分 回到总目录 Part VI 重积分 二重积分的普通对称性 二重积分的轮换对称性(直角坐标系下) 二重积分直角坐标系下的积分方法 二重积分极坐标系下的积分方法 二重积分中值定理 ...

  9. [opencv]拼接合并轮廓集合mergeContours

    /** * 拼接合并轮廓集合 * @param contours * @return */ vector<vector<Point>> mergeContours(vector ...

  10. 为什么说DI解耦

    为什么说IOC/DI(控制反转/依赖注入)降低耦合 public class HomeController : Controller { private readonly IStudentRepons ...