劍指 Offer 62 圓圈中最後剩下的數字C

2021-10-16 12:21:35 字數 881 閱讀 7434

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 輸出 ...