zoukankan      html  css  js  c++  java
  • 约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题

    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;
         }

  • 相关阅读:
    双系统卸载linux和装双系统的方法
    linux中使用vim编译C++程序
    存储器管理之页面置换算法
    Python中open文件的各种打开模式
    RAL调用
    分布式系统事务一致性解决方案
    消息队列设计
    nmq消息队列解析
    分布式session的实现
    分布式系统常用思想和技术总结 (入门很清楚)
  • 原文地址:https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7399300.html
Copyright © 2011-2022 走看看