面試題62 圓圈中最後剩下的數字(約瑟夫環問題)

2021-10-04 13:31:56 字數 519 閱讀 8076

0,1,n-1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。

例如,0、1、2、3、4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。

一開始打算用鍊錶暴力模擬。

然後嘗試了下遞迴就有了這道題的思路

實際上是乙個從大轉化到小的問題

大:每一次f(n,m)就是在n個數中,進行n-1次第m值刪減後得到的值。

當為f(n-1,m)時,此時數列的順序與f(n,m)時已經發生了變化。所以我們需要想辦法進行轉化。

我們讓被刪節點的後一節點為第乙個節點。此節點與原數列的節點的關係為:((m-1)%n+x+1)%n//其中x為f(n-1,m)中的值

理解了後**實現其實就很簡單了。

class

solution

};

面試題62 圓圈中最後剩下的數字

面試題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...

面試題62 圓圈中最後剩下的數字

1.題目描述 0,1,n 1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。例如,0 1 2 3 4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2 0 4 1,因此最後剩下的數字是3。示例 示例 1 輸入 n...

面試題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 ...