題目:0,1,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裏刪除第m個數字。求出這個圓圈裏剩下的最後一個數字。
例如,0、1、2、3、4這5個數字組成一個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。
分析:約瑟夫環問題,採用數學公式法比較簡單,模擬法會超時。
說白了還是需要找到數學規律,與寫代碼沒關係
,可以參考約瑟夫環
python代碼:
class Solution:
def lastRemaining(self, n: int, m: int) -> int:
fn = 0
for i in range(n):
fn = (fn+ m ) % (i+1)
return fn
模擬法,時間復炸度是o(mn),代碼爲:
class Solution:
def lastRemaining(n: int, m: int) -> int:
circle = [i for i in range(n)]
while len(circle) >1 :
for j in range(m-1):
last = circle.pop(0)
circle.append(last)
circle.pop(0)
return circle[0]