美文网首页
圆圈中最后剩下的数字

圆圈中最后剩下的数字

作者: 是新来的啊强呀 | 来源:发表于2020-06-11 11:34 被阅读0次

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

思路: 参考
这个问题实际上是约瑟夫问题,这个问题描述是:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
1、问题转换:F(n,m)表示有n个元素,没隔m个元素进行环形删除后最后剩下那个元素的索引号。
2、可以递推到一个公式:
f(n, m)=\left\{\begin{array}{ll}0 & n=1 \\ {[f(n-1, m)+m] \% n} & n>1\end{array}\right.

class Solution {
    public int lastRemaining(int n, int m) {
        // return recur(n,m);  使用递归
        // 方法一:不使用递归
        int pos = 0;
        for(int i = 2; i<=n; i++){
            pos = (pos+m)%i;
        }
        return pos;
    }

    // 方法二:递归
    public int recur(int n , int m){
        if(n==1)return 0;
        int x = recur(n-1,m);
        return (x+m) % n;
    }
}

相关文章

  • 1579-圆圈中最后剩下的数字

    圆圈中最后剩下的数字 题目 面试题62. 圆圈中最后剩下的数字0,1,,n-1这n个数字排成一个圆圈,从数字0开始...

  • 圆圈中最后剩下的数字

    1、题目描述 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆...

  • 圆圈中最后剩下的数字

    题目:0, 1, … , n-1 这 n 个数字排成一个圈圈,从数字 0 开始每次从圆圏里删除第 m 个数字。求出...

  • 圆圈中最后剩下的数字

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

  • 圆圈中最后剩下的数字

    题目描述 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下...

  • 圆圈中最后剩下的数字

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

  • 圆圈中最后剩下的数字

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/yuan-q...

  • 圆圈中最后剩下的数字

    题目: 题目的理解: 对“删除第3个数字”的理解是,当前指向的位置是1,然后删除下一个的下一个。如果是“删除第1个...

  • 面试题45:圆圈中最后剩下的数字

    面试题45:圆圈中最后剩下的数字 题目 这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这...

  • 阿里面试算法题合集一

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

网友评论

      本文标题:圆圈中最后剩下的数字

      本文链接:https://www.haomeiwen.com/subject/poivtktx.html