題目:約瑟夫環問題。0, 1, … , n-1 這n個數字排成乙個圈圈,從數字0開始每次從圓圏裡刪除第m個數字。求出這個圈圈裡剩下的最後乙個數字。
思路1:根據劍指中的思路,可以使用環形鍊錶來模擬圓圈。這種方法的話,每刪除乙個數字需要m步計算,共有n個數字,因此總的時間複雜度是o(mn),空間複雜度是o(n).
**1:
public int lastremaining_solution(int n, int m)
while (list.size() > 1)
return list.size() == 1 ?list.get(0): -1;
}思路2:根據劍指中的思路,我們可以對被刪除的數字進行規律,最後得到乙個遞推公式。函式f(n,m)表示在0到n-1這n個數字中刪除第m個數字最後剩下的數字,有以下遞推關係:
劍指62 圓圈中最後剩下的數字
題目 0 n 1的n個數排成乙個圓圈,從0開始每次從這個圓圈刪除第m個數字,然後從刪除的數字的下乙個數字開始繼續直到剩最後1個數字位置。方法1 用list模擬圓圈 的環形鍊錶 每次迴圈到end 時都手動更新到begin 效率不高 stl list使用 class solution cur circl...
劍指 62 圓圈中最後剩下的數字
題目描述 0,1,n 1這n個數字排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。演算法分析 方法一 使用鍊錶來模擬圓圈,時間複雜度為o mn 空間複雜度o n 方法二 約瑟夫環問題的數學公式法求解,公式推導見約瑟夫環問題 最簡單的數學解法 得到公式f n...
劍指Offer系列62 圓圈中最後剩下的數字
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 輸出 ...