2020/2/5 二刷
for迴圈裡面i等於多少,就是還原到長度為i的情況
這樣就理所當然是到n為止
會超時的
**並茂的大佬解法
以這樣的方法推導,是將每次的下乙個人當成新陣列的初始結點,所以最後一次一定是0,那麼接下來是便是怎麼通過最後一次是0來推導出剛開始時陣列的下標。
我們從f(8,3) 到 f(7,3)來推導一下
可見每一步從n - 1 倒推到 n 所做的事情無非兩部,
補上第n次被殺的那個人
這個人一定補在陣列的最後面,因為我們n - 1次的陣列是從第m + 1個元素開始一直到被殺的那個人。所以被殺的那個人就是現在的尾巴。
將n - 1次的陣列的所有元素往右移動m位
因為n - 1次的陣列從n次的m + 1下標開始,所以要變回原來的樣子就是把第乙個元素移動回原本的位置,右移動m次
所以 f(n)的推導公式為
時間複雜度o(n)
空間複雜度o(1)
劍指 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...
劍指 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 輸出 ...
劍指 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 輸出 ...