题目描述
你的初始能量为 P,初始分数为 0,只有一包令牌。
令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下:
- 如果你至少有 token[i] 点能量,可以将令牌置为正面朝上,失去 token[i] 点能量,并得到 1 分。
- 如果我们至少有 1 分,可以将令牌置为反面朝上,获得 token[i] 点能量,并失去 1 分。
在使用任意数量的令牌后,返回我们可以得到的最大分数。
示例:
输入:tokens = [6,0,39,52,45,49,59,68,42,37], P = 99
输出:5
总结
感觉现在我的问题是 总结问题的规律的层次还太低,把一个规律总结的太复杂就是总结得不好的表现,我现在总结一些问题的规律的时候有些零散了。
Sample & Demo Code 1
class Solution {
public int bagOfTokensScore(int[] tokens, int P) {
Arrays.sort(tokens);
int res = 0, point = 0;
int lo = 0, hi = tokens.length-1;
while(lo <= hi && (P >= tokens[lo] || points > 0)) {
while(lo <= hi && P >= tokens[lo]) {
points++;
P -= tokens[lo++];
}
res = Math.max(res, points);
if(lo <= hi && points > 0) {
points--;
P += tokens[hi--];
}
}
return res;
}
}
Sample & Demo Code 2
class Solution {
public int bagOfTokensScore(int[] tokens, int P) {
Arrays.sort(tokens);
int s = 0 , e = tokens.length-1;
int res = 0;
while(s <= e) {
if(tokens[s] > P) {
if(res > 0) {
P += (tokens[e] - tokens[s]);
s++;
e--;
}else return res;
}else {
P -= tokens[s];
s++;
res++;
}
}
return res;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bag-of-tokens