排序 中等 948 令牌放置

2021-10-20 21:54:02 字數 2218 閱讀 5480

【題目】

你的初始 能量 為 p,初始 分數 為 0,只有一包令牌 tokens 。其中 tokens[i] 是第 i 個令牌的值(下標從 0 開始)。

令牌可能的兩種使用方法如下:

如果你至少有 token[i] 點 能量 ,可以將令牌 i 置為正面朝上,失去 token[i] 點 能量 ,並得到 1 分 。

如果我們至少有 1 分 ,可以將令牌 i 置為反面朝上,獲得 token[i] 點 能量 ,並失去 1 分 。

每個令牌 最多 只能使用一次,使用 順序不限 ,不需 使用所有令牌。

在使用任意數量的令牌後,返回我們可以得到的最大 分數 。

【示例 1】

輸入:tokens = [100], p = 50

輸出:0

解釋:無法使用唯一的令牌,因為能量和分數都太少了。

【示例 2】

輸入:tokens = [100,200], p = 150

輸出:1

解釋:令牌 0 正面朝上,能量變為 50,分數變為 1 。不必使用令牌 1 ,因為你無法使用它來提高分數。

【示例 3】

輸入:tokens = [100,200,300,400], p = 200

輸出:2

解釋:按下面順序使用令牌可以得到 2 分:

令牌 0 正面朝上,能量變為 100 ,分數變為 1

令牌 3 正面朝下,能量變為 500 ,分數變為 0

令牌 1 正面朝上,能量變為 300 ,分數變為 1

令牌 2 正面朝上,能量變為 0 ,分數變為 2

提示0 <= tokens.length <= 1000

0 <= tokens[i], p < 104

【**】

【python】

class

solution

:def

bagoftokensscore

(self, tokens: list[

int]

, p:

int)

->

int:

tokens.sort(

)#目標:更多的分數

#1分可以換取乙個令牌的能量,將該令牌反面向上

#分數盡可能換成右側的,翻令牌得分盡可能使用左側的

cnt,maxcnt=0,

0 l,r=0,

len(tokens)-1

#特殊情況預處理流程

if l==r and p>=tokens[0]

:return

1elif tokens and p:return

0#一般情況處理流程

while lwhile p>=tokens[l]

: p-=tokens[l]

l+=1#下標+1

cnt+=

1#分數+1

#能量不夠了 退出迴圈

#用一分換取能量,先判斷是否有分數可換取

if cnt:

maxcnt=

max(maxcnt,cnt)

p+=tokens[r]

r-=1 cnt-=

1else

:break

print

(p,l,r)

return maxcnt

【方法2】

class

solution

(object):

defbagoftokensscore

(self, tokens, p)

: tokens.sort(

) deque = collections.deque(tokens)

ans = bns =

0while deque and

(p >= deque[0]

or bns)

:while deque and p >= deque[0]

: p -= deque.popleft(

) bns +=

1 ans =

max(ans, bns)

if deque and bns:

p += deque.pop(

) bns -=

1return ans

leetcode 948 令牌放置

你的初始能量為p,初始分數為0,只有一包令牌。令牌的值為token i 每個令牌最多只能使用一次,可能的兩種使用方法如下 在使用任意數量的令牌後,返回我們可以得到的最大分數。示例 1 輸入 tokens 100 p 50輸出 0示例 2 輸入 tokens 100,200 p 150輸出 1示例 3...

Leetcode 948 令牌放置

你的初始能量為p,初始分數為0,只有一包令牌。令牌的值為token i 每個令牌最多只能使用一次,可能的兩種使用方法如下 在使用任意數量的令牌後,返回我們可以得到的最大分數。示例 1 輸入 tokens 100 p 50輸出 0示例 2 輸入 tokens 100,200 p 150輸出 1示例 3...

令牌放置 leetcode948

1 本題主要依據乙個原則 能量換積分時取小能量,積分換能量時取大能量。所以需要保證陣列有序。2 先對陣列進行排序,然後雙指標分別指向陣列左右端點。3 定義積分 count表示不兌換最後一次,countchange表示兌換最後一次 能量不足時有沒有必要兌換 4 雙指標left right時迴圈brea...