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()
    }
}