版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjucor/article/details/84483521
You have an initial power P
, an initial score of 0
points, and a bag of tokens.
Each token can be used at most once, has a value token[i]
, and has potentially two ways to use it.
- If we have at least
token[i]
power, we may play the token face up, losingtoken[i]
power, and gaining1
point. - If we have at least
1
point, we may play the token face down, gainingtoken[i]
power, and losing1
point.
Return the largest number of points we can have after playing any number of tokens.
Example 1:
Input: tokens = [100], P = 50 Output: 0
Example 2:
Input: tokens = [100,200], P = 150 Output: 1
Example 3:
Input: tokens = [100,200,300,400], P = 200 Output: 2
Note:
tokens.length <= 1000
0 <= tokens[i] < 10000
0 <= P < 10000
思路:典型的two-pointer
class Solution(object):
def bagOfTokensScore(self, tokens, P):
"""
:type tokens: List[int]
:type P: int
:rtype: int
"""
if not tokens: return 0
tokens.sort()
if P<tokens[0]: return 0
i,j=0,len(tokens)-1
res=points=0
while i<=j:
while i<=j and P>=tokens[i]:
points+=1
P-=tokens[i]
res=max(res,points)
i+=1
points-=1
P+=tokens[j]
j-=1
return res
s=Solution()
print(s.bagOfTokensScore(tokens = [81,91,31], P = 73))
print(s.bagOfTokensScore(tokens = [26], P = 50))
print(s.bagOfTokensScore(tokens = [100], P = 50))
print(s.bagOfTokensScore(tokens = [100,200], P = 150))
print(s.bagOfTokensScore(tokens = [100,200,300,400], P = 200))