2024每日刷题(150)
Leetcode—1823. 找出游戏的获胜者
模拟实现代码
class Solution {
public:
int findTheWinner(int n, int k) {
// simulate
vector<int> v;
for(int i = 1; i <= n; i++) {
v.push_back(i);
}
int idx = 0;
while(v.size() > 1) {
idx = (idx + k - 1) % v.size();
v.erase(v.begin() + idx);
}
return v[0];
}
};
运行结果
队列实现代码
class Solution {
public:
int findTheWinner(int n, int k) {
// how about queue method
queue<int> q;
for(int i = 1; i <= n; i++) {
q.push(i);
}
while(q.size() > 1) {
for(int i = 1; i <= k - 1; i++) {
q.push(q.front());
q.pop();
}
q.pop();
}
return q.front();
}
};
运行结果
递归实现代码
class Solution {
public:
int findTheWinner(int n, int k) {
// recursive
function<int(int)> dfs = [&] (int n) {
if(n == 1) {
return 0;
}
int idx = dfs(n - 1);
return (idx + k) % n;
};
return dfs(n) + 1;
}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!