0,1,n-1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。例如,0、1、2、3、4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。
示例 1:
輸入: n =
5, m =
3輸出:
3示例 2:
輸入: n =
10, m =
17輸出:
2
限制:1 <= n <= 10^5
1 <= m <= 10^6
很容易想到鍊錶法,但是會超時
class
solution
else
}return l.
back()
;}};
數學解法:最終剩下乙個人時的安全位置肯定為0,反推安全位置在人數為n時的編號
人數為1: 0
人數為2: (0+m) % 2
人數為3: ((0+m) % 2 + m) % 3
人數為4: (((0+m) % 2 + m) % 3 + m) % 4
class
solution
return p;}}
;
約瑟夫環數學解法
無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...
約瑟夫環 數學解法
約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍 從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。f 1 0 f i f i 1 m i i 1 includeusin...
約瑟夫環 數學策略
無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...