当前位置:首页 > 牛客 > 牛客3407题解:用递推破解约瑟夫环

牛客3407题解:用递推破解约瑟夫环

2个月前 (08-11)

牛客3407题解:用递推破解约瑟夫环 牛客题解 约瑟夫环 递推 C++ 环形结构 第1张

一、题目解读

牛客3407题(约瑟夫环问题)要求n个人围成环,从第1个人开始报数,报到m的人出列,重复直至剩最后一人。用户提供的代码通过递推公式直接计算最后幸存者的编号,避免了传统环形链表模拟的高复杂度,实现高效求解。

二、解题思路

核心思想为:

1. 数学建模:将问题转化为递推关系,利用数学归纳法推导公式;

2. 递推公式:定义f(n,m)为n人环中最后幸存者编号,则f(n,m) = (f(n-1,m) + m) % n;

3. 边界条件:当n=1时,唯一幸存者编号为0(即第1人),递推由此展开;

4. 优化逻辑:通过取模运算避免数组模拟,直接计算最终结果。

三、解题步骤

1. 输入校验:若n或m非法(<1),返回-1;

2. 初始化:设置last=0(即f(1,m)=0);

3. 递推循环:从i=2到n,执行last = (last + m) % i,模拟人数递增时的幸存者编号变化;

4. 结果返回:循环结束后,last即为最终答案。

四、代码与注释

class Solution {
public:
    int LastRemaining_Solution(int n, int m) {
        if (n < 1 || m < 1) return -1; // 处理非法输入
        int last = 0; // n=1时的解
        // 递推公式:f(n,m)=(f(n-1,m)+m)%n
        for (int i = 2; i <= n; ++i) {
            last = (last + m) % i;
        }
        return last; // 返回最后剩下的数字
    }
};

五、总结

本解法通过递推公式将复杂的环形淘汰问题转化为线性计算,时间复杂度O(n),空间复杂度O(1)。关键在于理解递推关系的数学本质,避免传统模拟带来的高开销。适用于需要高效求解约瑟夫环问题的场景,展示了算法设计中“化繁为简”的巧妙思路。


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

题目解读给定一个整数数组,我们需要找到一个中心索引,使得该索引左侧所有元素的和等于右侧所有元素的和。如果不存在这样的索引,则返回-1。中心索引的定义不包含在左右两侧的和计算中。这个问题考察对数组遍历和...

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

题目重解我们面对一个经典背包问题的变体:给定n个物品,每个物品有重量w和价值v,背包容量为V。需要回答两个问题:1) 普通情况下能获得的最大价值;2) 必须恰好装满背包时的最大价值(若无法装满则输出0...

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

题目解读‌斐波那契数列是一个经典的数学问题,在计算机科学中常被用作算法教学的入门案例。这个神奇的数列从0和1开始,后续每个数字都是前两个数字之和。题目要求我们计算第n个斐波那契数,看似简单的问题背后却...

力扣540题:线性扫描法如何高效定位唯一数

力扣540题:线性扫描法如何高效定位唯一数

题目重解一个严格递增的有序数组中,除某个元素外,其余每个元素均出现两次。这个看似简单的条件背后隐藏着巧妙的规律——单一元素会打破数组的"成对对称性"。题目要求以O(log n)时间...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。