思路:f(n, m)表示最後的結果,則可以理解為n, m經過各種變換得到最終的數字。
經過一輪變換變成f'(n-1, m),由於對映關係變了,所以對應的f也變了,但是f(n, m) = f'(n-1, m)
想辦法可不可以把f'(n-1, m)變成f(n-1, m)呢?
1. 第一輪,拿到第m個數
2. 想象如果第m個數沒有拿掉,第二輪開始則相當於第一輪的數字平移過來m位
3. 第二輪比第一輪少了第m個數,但是座標只是相對於第一輪平移m的
4. f(n, m) = f'(n-1, m) = (f(n-1, m) + m) % n
int last_remaining(int n, intm)
45 圓圈中最後剩下的數字
面試題45 圓圈中最後剩下的數字 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首...
劍指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...