Advertisement

剑指 Offer 62: 约瑟夫环问题中的最后一个数字

阅读量:

源自《剑指 Offer》中的第62题:环状结构中的最后一个存活者

题目描述

将这些0,1,\cdots,n-1数值排列成一个环形序列,在起始点位于0的位置时开始操作;按照每轮删除当前的第m个元素的原则进行循环移除(即每次移除后均从下一个未被移除的元素位置重新开始计数)。通过此过程最终能够确定该环形序列中最后残留的元素

例如,在编号为0到4的五个连续整数构成的环状结构中,按照每隔两个数字删除一个的位置进行操作时,前四个被移除的编号依次为2、0、4、1;经过上述操作后最终留下的原始编号为3。

示例 1:

输入: n = 5, m = 3
输出: 3
示例 2:

输入: n = 10, m = 17
输出: 2

解题思路

((n-1)个元素情况下,剩余元素的下标 + m) % n

复制代码
    public int lastRemaining_1(int n, int m) {
        return f(n,m);
    }
    public int f(int n,int m){
        if (n == 1)
            return 0;
        int x = f(n - 1,m);  // 查找 有n-1个数字 的情况下,删除第m个数字 的剩余元素
        return (

全部评论 (0)

还没有任何评论哟~