給定乙個從1 到 n 排序的整數列表。
首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。
第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。
我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。
返回長度為 n 的列表中,最後剩下的數字。
示例:
輸入:
n = 9,
1 2 3 4 5 6 7 8 9
2 4 6 8
2 66
輸出:6
1. 遞迴
邊界條件
if (n == 1)
return 1;
if (n <= 4)
return 2;
遞迴規律:
考慮到邊界條件,n > 4.
由於n9和n8,第一次消除之後結果完全一樣,故後面結果都一致。故把所有n都當做偶數處理
if(n % 2 != 0)
n -= 1;
解題思路
2. 暴力破解,迴圈
將[1, n]用列表儲存,迴圈判斷,每次劃掉一批數,或者將這批數置位0,當只有乙個數輸出。
int lastremaining(int n) {
if (n == 1)
return 1;
if (n <= 4)
return 2;
if (n % 2 != 0)
n -= 1;
if (n % 4 != 0)
return 4 * lastremaining(n / 4);
else
return 4 * lastremaining(n / 4) - 2;
Leetcode 390 消除遊戲 遞迴
給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...
Leetcode 390 消除遊戲 C
給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...
390 消除遊戲(python
題目 給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中...