当前位置 博文首页 > 中流击水,浪遏飞舟:约瑟夫环问题&&动规&&剑指

    中流击水,浪遏飞舟:约瑟夫环问题&&动规&&剑指

    作者:[db:作者] 时间:2021-08-26 12:41

    当数据规模比较大时,用链表法while(node->next->next){ }遍历删除会超时,
    考虑数学和动态规划解法(发现dp[n-1]和dp[n]之间的关系,即这个状态和下一个状态之间的关系,这道题目里是数字下标的映射关系,大问题分成下一个小问题解决)。

    class Solution {
    public:
        //参照数据规模,链表解法会超时
        int lastRemaining(int n, int m) {
            int x=0;        //i=1时,即n=1时,不论m和值,最后输出结果都是0
            for(int i=2;i<=n;i++){
                x=(x+m)%i;      //递推公式,根据映射关系,上一个状态推出下一个状态,最后求余的是i
            }
            return x;
        }
    };
    
    cs