LeetCode 1823 找出游戏的获胜者[队列 模拟 数学] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1823 找出游戏的获胜者[队列 模拟 数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。



解题思路:
围成一圈可以用队列来模拟,每次遍历过的伙伴会在最后被访问,即从队首调到了队尾,每次数到目标数字的伙伴直接出队列,直到队列只有一个伙伴,返回该伙伴,代码如下:

class Solution 
public:
    int findTheWinner(int n, int k) 
        queue<int> q;
        for(int i = 1; i <= n; i ++) 
            q.emplace(i);
        
        while(q.size() > 1) 
            for(int i = 1; i < k; i ++) 
                q.emplace(q.front());
                q.pop();
            
            q.pop();
        
        return q.front();
    
;

队列解法容易超时,所以一般用数学解法。这题本质是约瑟夫环问题,具体可以看这个题解,代码如下:

class Solution 
public:
    int findTheWinner(int n, int k) 
        int winner = 0;
        for(int i = 2; i <= n; i ++) 
            winner = (winner + k) % i;
        
        return winner + 1;
    
;

以上是关于LeetCode 1823 找出游戏的获胜者[队列 模拟 数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode|1823. 找出游戏的获胜者(rust太好用了)

算法leetcode|1823. 找出游戏的获胜者(rust太好用了)

约瑟夫环——递推公式详解(leetcode 1823. 找出游戏的获胜者)

LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

LeetCode刷题笔记-数据结构-day14

LeetCode刷题笔记-数据结构-day14