題目描述:
n 個朋友在玩游戲。這些朋友坐成一個圈,按 順時針方向 從 1 到 n 編號。從第 i 個朋友的位置開始順時針移動 1 步會到達第 (i + 1) 個朋友的位置(1 <= i < n),而從第 n 個朋友的位置開始順時針移動 1 步會回到第 1 個朋友的位置。
游戲規則如下:
第 1 個朋友接球。
接著,第 1 個朋友將球傳給距離他順時針方向 k 步的朋友。
然后,接球的朋友應該把球傳給距離他順時針方向 2 * k 步的朋友。
接著,接球的朋友應該把球傳給距離他順時針方向 3 * k 步的朋友,以此類推。
換句話說,在第 i 輪中持有球的那位朋友需要將球傳遞給距離他順時針方向 i * k 步的朋友。
當某個朋友第 2 次接到球時,游戲結束。
在整場游戲中沒有接到過球的朋友是 輸家 。
給你參與游戲的朋友數量 n 和一個整數 k ,請按升序排列返回包含所有輸家編號的數組 answer 作為答案。
示例:
解題思路:
利用數組存儲接到球的次數,當有朋友接到2次的時候統計接到次數為0的下標進行輸出。
相關代碼:
class Solution {public int[] circularGameLosers(int n, int k) {int i=0,j=1;int[] accept=new int[n];accept[0]=1;while(accept[i]<2) {i=(i+j*k)%n;accept[i]++;j++;}int[] result=new int[n-j+1];j=0;for(i=0;i<accept.length;i++) {if(accept[i]==0) {result[j]=i+1;j++;}}return result;}
}
代碼效率:
https://leetcode.cn/problems/find-the-losers-of-the-circular-game/submissions/456795103/