返回介绍

solution / 2600-2699 / 2682.Find the Losers of the Circular Game / README_EN

发布于 2024-06-17 01:03:01 字数 5760 浏览 0 评论 0 收藏 0

2682. Find the Losers of the Circular Game

中文文档

Description

There are n friends that are playing a game. The friends are sitting in a circle and are numbered from 1 to n in clockwise order. More formally, moving clockwise from the ith friend brings you to the (i+1)th friend for 1 <= i < n, and moving clockwise from the nth friend brings you to the 1st friend.

The rules of the game are as follows:

1st friend receives the ball.

  • After that, 1st friend passes it to the friend who is k steps away from them in the clockwise direction.
  • After that, the friend who receives the ball should pass it to the friend who is 2 * k steps away from them in the clockwise direction.
  • After that, the friend who receives the ball should pass it to the friend who is 3 * k steps away from them in the clockwise direction, and so on and so forth.

In other words, on the ith turn, the friend holding the ball should pass it to the friend who is i * k steps away from them in the clockwise direction.

The game is finished when some friend receives the ball for the second time.

The losers of the game are friends who did not receive the ball in the entire game.

Given the number of friends, n, and an integer k, return _the array answer, which contains the losers of the game in the ascending order_.

 

Example 1:

Input: n = 5, k = 2
Output: [4,5]
Explanation: The game goes as follows:
1) Start at 1st friend and pass the ball to the friend who is 2 steps away from them - 3rd friend.
2) 3rd friend passes the ball to the friend who is 4 steps away from them - 2nd friend.
3) 2nd friend passes the ball to the friend who is 6 steps away from them  - 3rd friend.
4) The game ends as 3rd friend receives the ball for the second time.

Example 2:

Input: n = 4, k = 4
Output: [2,3,4]
Explanation: The game goes as follows:
1) Start at the 1st friend and pass the ball to the friend who is 4 steps away from them - 1st friend.
2) The game ends as 1st friend receives the ball for the second time.

 

Constraints:

  • 1 <= k <= n <= 50

Solutions

Solution 1

class Solution:
  def circularGameLosers(self, n: int, k: int) -> List[int]:
    vis = [False] * n
    i, p = 0, 1
    while not vis[i]:
      vis[i] = True
      i = (i + p * k) % n
      p += 1
    return [i + 1 for i in range(n) if not vis[i]]
class Solution {
  public int[] circularGameLosers(int n, int k) {
    boolean[] vis = new boolean[n];
    int cnt = 0;
    for (int i = 0, p = 1; !vis[i]; ++p) {
      vis[i] = true;
      ++cnt;
      i = (i + p * k) % n;
    }
    int[] ans = new int[n - cnt];
    for (int i = 0, j = 0; i < n; ++i) {
      if (!vis[i]) {
        ans[j++] = i + 1;
      }
    }
    return ans;
  }
}
class Solution {
public:
  vector<int> circularGameLosers(int n, int k) {
    bool vis[n];
    memset(vis, false, sizeof(vis));
    for (int i = 0, p = 1; !vis[i]; ++p) {
      vis[i] = true;
      i = (i + p * k) % n;
    }
    vector<int> ans;
    for (int i = 0; i < n; ++i) {
      if (!vis[i]) {
        ans.push_back(i + 1);
      }
    }
    return ans;
  }
};
func circularGameLosers(n int, k int) (ans []int) {
  vis := make([]bool, n)
  for i, p := 0, 1; !vis[i]; p++ {
    vis[i] = true
    i = (i + p*k) % n
  }
  for i, x := range vis {
    if !x {
      ans = append(ans, i+1)
    }
  }
  return
}
function circularGameLosers(n: number, k: number): number[] {
  const vis = new Array(n).fill(false);
  const ans: number[] = [];
  for (let i = 0, p = 1; !vis[i]; p++) {
    vis[i] = true;
    i = (i + p * k) % n;
  }
  for (let i = 0; i < vis.length; i++) {
    if (!vis[i]) {
      ans.push(i + 1);
    }
  }
  return ans;
}
impl Solution {
  pub fn circular_game_losers(n: i32, k: i32) -> Vec<i32> {
    let mut vis: Vec<bool> = vec![false; n as usize];

    let mut i = 0;
    let mut p = 1;
    while !vis[i] {
      vis[i] = true;
      i = (i + p * (k as usize)) % (n as usize);
      p += 1;
    }

    let mut ans = Vec::new();
    for i in 0..vis.len() {
      if !vis[i] {
        ans.push((i + 1) as i32);
      }
    }

    ans
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文