390 消除遊戲(python

2021-09-12 07:03:23 字數 928 閱讀 1090

題目:

給定乙個從1 到 n 排序的整數列表。

首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。

第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。

我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。

返回長度為 n 的列表中,最後剩下的數字。

示例:輸入:

n = 9,

1 2 3 4 5 6 7 8 9

2 4 6 8

2 66

輸出:6

思路:每刪一次,數字之間的距離會變為之前的兩倍,並且:

從左往右刪的時候,每次都是刪掉第乙個數字;

從右往左刪的時候,則有可能刪掉第乙個或者第二個數字;

如果剩下的數字個數是偶數,刪掉的是第二個數字;

如果剩下的數字個數是奇數,刪掉的是第乙個數字;

所以我們只需要計算出並記錄當前陣列的第乙個數字,只要第乙個數字有了,後面的數字都可以計算出來了。

**

class

solution

:def

lastremaining

(self, n:

int)

->

int:

base=

1 res=

1while

(base*

2<=n)

: res+=base

base*=2if

(base*

2>n)

:breakif(

int(

(n/base))%

2==1)

: res+=base

base*=

2return res

LeetCode 390 消除遊戲

給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...

Leetcode 390 消除遊戲 遞迴

給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...

Leetcode 390 消除遊戲 C

給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...