前往
大廳
主題

LeetCode - 1823. Find the Winner of the Circular Game 解題心得

Not In My Back Yard | 2022-09-10 12:00:14 | 巴幣 0 | 人氣 205

題目連結:


題目意譯:
現在有 n 位朋友正玩著一個遊戲。朋友們正坐成一圈並且順時針編號為 1 到 n。更正式地說,從第 i 位朋友順時針移動將會到達第 i + 1 位朋友,對於 1 ≦ i < n,而且從第 n 位朋友順時針移動將會把你到回到第 1 位朋友。

遊戲規則如下:
1. 從第 1 位朋友開始。
2. 包含你一開始位於的朋友,順時針方向數 k 個朋友。數數有可能會繞回起點並且可能有某些朋友被重複計算多次。
3. 最後一個你數到的朋友將離開這個圓圈並輸掉遊戲。
4. 如果圓圈內有多於一位朋友存在,則回到第 2 步並且從剛被淘汰的朋友順時針序位的下一個朋友開始並重複前敘步驟。
5. 反之,最後一個還在圓圈內的朋友即是遊戲的贏家。

給定朋友數 n 以及一整數 k,回傳此遊戲的贏家。

限制:
1 ≦ k ≦ n ≦ 500

進階:你可以在線性時間並用常數空間解出來嗎?



範例測資:
範例 1:
輸入: n = 5, k = 2
輸出: 3
解釋: 以下為遊戲的流程:
1) 開始於朋友 1 號。
2) 順時針數 2 位朋友,其為朋友 1 和 2 號。
3) 朋友 2 號離開圓圈。接著開始於朋友 3 號。
4) 順時針數 2 位朋友,其為朋友 3 和 4 號。
5) 朋友 4 號離開圓圈。接著開始於朋友 5 號。
6) 順時針數 2 位朋友,其為朋友 5 和 1 號。
7) 朋友 1 號離開圓圈。接著開始於朋友 3 號。
8) 順時針數 2 位朋友,其為朋友 3 和 5 號。
9) 朋友 5 號離開圓圈。現在只剩朋友 3 號留了下來,因此他是贏家。

範例 2:
輸入: n = 6, k = 5
輸出: 1
解釋: 朋友們以此順序離開:5 、 4 、  6 、 2 、 3。贏家為朋友 1 號。


解題思維:
經典的約瑟夫斯(Josephus's)問題,參見這題




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作