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 的子数组