zoukankan      html  css  js  c++  java
  • 剑指offer62. 圆圈中最后剩下的数字

    0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

    例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

    分析:约瑟夫环问题,可以用循环链表模拟,复杂度$O(nm)$,n,m较大时效率太低

    可以推出递推公式:

    class Solution {
    public:
        int lastRemaining(int n, int m) {
            int last = 0;
            for (int i = 2; i <= n; ++i) {
                last = (last + m) % i;
            }
            return last;
        }
    };
  • 相关阅读:
    Linux Netcat命令
    clang-format
    keytool
    ip
    Linux iptables
    Linux yum源完全配置
    Makefile
    CMake
    HSTS
    开源镜像
  • 原文地址:https://www.cnblogs.com/betaa/p/12668375.html
Copyright © 2011-2022 走看看