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

2021-10-14 03:20:56 字數 826 閱讀 9863

劍指 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

輸出: 3

示例 2:

輸入: n = 10, m = 17

輸出: 2

限制:

1 <= n <= 10^5

1 <= m <= 10^6

基本思路:用雙端佇列模擬環,如果是第m個元素,出隊,否則是先出隊,再從隊尾入隊

int lastremaining(int n, int m) 

}return dq.empty()?n-1:dq.front();

}

基本思路:從最後乙個剩餘元素x(下標為零),逆向向上推到其在原始佇列中的位置,假設f(n,m)表示的是在長度為n的佇列中,x的位置

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