【leetcode】948. Bag of Tokens
题目如下:
You have an initial power
P
, an initial score of0
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
解题思路:本题可以用贪心算法。即可以得分的时候优先选择当前最小的token[i]得分,不能得分的时候选择当前可选的最大的token[i]换取power。所以只需要将tokens排序,分别从两端选择当前最小/最大的元素即可。
代码如下:
class Solution(object): def bagOfTokensScore(self, tokens, P): """ :type tokens: List[int] :type P: int :rtype: int """ tokens.sort() low = 0 high = len(tokens) - 1 res = 0 point = 0 while low <= high: if P >= tokens[low]: point += 1 P -= tokens[low] low += 1 res = max(res,point) elif point > 0: point -= 1 P += tokens[high] high -= 1 else: low += 1 return res