你的初始 能量 为 power
,初始 分数 为 0
,只有一包令牌 tokens
。其中 tokens[i]
是第 i
个令牌的值(下标从 0 开始)。
令牌可能的两种使用方法如下:
- 如果你至少有
token[i]
点 能量 ,可以将令牌i
置为正面朝上,失去token[i]
点 能量 ,并得到1
分 。 - 如果我们至少有
1
分 ,可以将令牌i
置为反面朝上,获得token[i]
点 能量 ,并失去1
分 。
每个令牌 最多 只能使用一次,使用 顺序不限 ,不需 使用所有令牌。
在使用任意数量的令牌后,返回我们可以得到的最大 分数 。
示例 1:
输入:tokens = [100,200,300,400], power = 200 输出:2 解释:按下面顺序使用令牌可以得到 2 分: 1. 令牌 0 正面朝上,能量变为 100 ,分数变为 1 2. 令牌 3 正面朝下,能量变为 500 ,分数变为 0 3. 令牌 1 正面朝上,能量变为 300 ,分数变为 1 4. 令牌 2 正面朝上,能量变为 0 ,分数变为 2
class Solution {
public int bagOfTokensScore(int[] tokens, int power) {
Arrays.sort(tokens);
int a = 0;
int number = 0;//分数
for (int i = 0; i < tokens.length - a; i++) {
if (power >= tokens[i]) {
power -= tokens[i];
number++;
} else {//能量值不够
while (a < tokens.length - i) {
a++;
number--;
if (number < 0) return 0;
power += tokens[tokens.length - a];
if (power >= tokens[i]) {
power -= tokens[i];
number++;
break;
}
}
}
}
return number;
}
}