public class Solution {
// 左神解法,本题本质还是报数为m-1的倍数的人死。求最后一个活着的人是初始时候的哪个人
       /* 报数(A) 实际人员编号(B)
        0 0
  . .
  . .
  n-1 n-1
  n 0
  则可知B = A % n
  同时,当杀了一个人之后,杀人前记为before,杀人后记为after.
  before               after
  k (k < n)            (没有了,因为被杀后变为n-1个人了)
  k+1 0
  .          .
  .          .
  n-2        n-k-3
  0          n-k-2
  .          .
  .          .
  k-1        n-2
    符合公式before = (after + k + 1) % n
      可知,最后一个活着的人为0号,因此可以利用逆推的方法求得活着的那个人。*/

      public int LastRemaining_Solution(int n, int m) {
        if (n < 1 || m < 1) {
          return -1;
        }
        int live = getLive(n, m);
        return live;
      }
      public int getLive(int n, int m) {
        if (n == 0) {
          return 0;
        }
        return (getLive(n - 1, m) + m) % n;
     }

转载于:https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7399300.html

约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题相关推荐

  1. 剑指offer——圆圈中最后剩下的数字

    1.如果通过环形列表去模拟圆圈的话,最后时间复杂度为O(mn),而且还需要一个辅助链表来模拟圆圈,空间复杂度为O(n). 2.通过找出递推公式的方法,求得递推公式为 时间复杂度为O(n),空间复杂度为 ...

  2. 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例

    本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...

  3. 丢手帕问题 java_java基于双向环形链表解决丢手帕问题的方法示例

    导读热词 本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解 ...

  4. 【LeetCode】剑指 Offer 40. 最小的k个数

    [LeetCode]剑指 Offer 40. 最小的k个数 文章目录 [LeetCode]剑指 Offer 40. 最小的k个数 一.笨比解法 二.堆排序 三.快速选择 总结 一.笨比解法 选择排序变 ...

  5. 剑指offer 矩阵中的路径 @python

    剑指offer 矩阵中的路径 @python 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...

  6. 【Java】 剑指offer(40) 最小的k个数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...

  7. 《剑指offer》最小的k个数

    题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析:剑指offer刷到现在,大家可能都有个很大的感触,那就是要非常熟 ...

  8. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  9. 最小的k个数 java_【Java】 剑指offer(40) 最小的k个数

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思 ...

最新文章

  1. 【目标检测】(6) YOLOV2 目标检测在V1基础上的改进
  2. Mac OS X下Maven的安装与配置
  3. 实验数据:将甲醛和亚硝酸的模拟分子网络分别计算100次的结果
  4. [深度应用]·实战掌握Dlib人脸识别开发教程
  5. 因xhost命令和DISPLAY环境变量操作不当导致无法启动Oracle图形化安装界面
  6. Skywalking部署常见问题以及注意事项
  7. 蓝桥杯第八届省赛JAVA真题----字母组串
  8. ubuntu中flashcache使用教程
  9. 用命令来操作vSphere:十一 PowerCLI命令--虚拟机操作
  10. [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画
  11. Ubuntu如何安装deb包 使用 dpkg解决依赖性问题
  12. 设计模式-Decorator装饰模式
  13. 算法: 最大正方形面积221. Maximal Square
  14. CMU 15-213 Introduction to Computer Systems学习笔记(20) Concurrent Programming
  15. 什么是网络分析仪?它的重要技术指标有哪些?
  16. C语言-求一元二次方程的解-你是否会了呢?
  17. RabbitMQ 开发时指定消息消费者的方式
  18. 上汽集团 java_【上汽集团工资】研发工程师待遇-看准网
  19. 51信用卡两道编程题
  20. LeetCode第78题解析

热门文章

  1. js中各种跨域问题实战小结
  2. ubuntu LAMP安装
  3. Java原子操作类,你知道多少?
  4. Toby Walsh教授:四个指数趋势解释人工智能威胁论!
  5. WPF线性渐变画刷应用之——炫彩线条
  6. docker 创建启用systemd服务的容器
  7. 重置MYSQL的root 密码
  8. Asp.net的加密解密技巧--[转载]
  9. 宽带服务价值链之:ISP,ICP,ASP,IDC,CDN
  10. 关于持续集成几点知识点