跳到主要内容

2682.找出转圈游戏输家

链接:2682.找出转圈游戏输家
难度:Easy
标签:数组、哈希表、模拟
简介:给你参与游戏的朋友数量 n 和一个整数 k ,请按升序排列返回包含所有输家编号的数组 answer 作为答案。

题解 1 - cpp

  • 编辑时间:2023-08-16
  • 执行用时:8ms
  • 内存消耗:13.16MB
  • 编程语言:cpp
  • 解法介绍:模拟。
class Solution {
public:
vector<int> circularGameLosers(int n, int k) {
int list[50] = {0}, cur = 0;
list[cur] += 1;
for (int i = 1; ; i++) {
cur = (cur + i * k) % n;
list[cur] += 1;
if (list[cur] > 1) break;
}
vector<int> res;
for (int i = 0; i < n; i++) {
if (list[i] == 0) res.push_back(i + 1);
}
return res;
}
};

题解 2 - python

  • 编辑时间:2023-08-16
  • 执行用时:72ms
  • 内存消耗:15.46MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def circularGameLosers(self, n: int, k: int) -> List[int]:
list = [0 for _ in range(n)]
cur = 0
list[cur] += 1
i = 1
while True:
cur = (cur + i * k) % n
list[cur] += 1
i += 1
if list[cur] > 1:
break
res = []
for i in range(n):
if list[i] == 0:
res.append(i + 1)
return res

题解 3 - rust

  • 编辑时间:2023-08-16
  • 执行用时:4ms
  • 内存消耗:1.88MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn circular_game_losers(n: i32, k: i32) -> Vec<i32> {
let n = n as usize;
let k = k as usize;
let mut list = vec![0; n];
let mut cur = 0;
list[cur] += 1;
for i in 1.. {
cur = (cur + i * k) % n;
list[cur] += 1;
if list[cur] > 1 {
break;
}
}
(0..n)
.collect::<Vec<_>>()
.into_iter()
.filter(|i| list[*i] == 0)
.map(|v| (v + 1) as i32)
.collect()
}
}