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
class Solution {
public:
int bagOfTokensScore(vector<int>& tokens, int p) {
if(tokens.size()==0)
return 0;
sort(tokens.begin(),tokens.end());
if(tokens[0]>p)
return 0;
int score=0;
//p-=tokens[0];
//++score;
int i=0,j=tokens.size()-1,maxx=1;
while(i<j)
{
while(p>=tokens[i])
{
p-=tokens[i];
++score;
++i;
maxx=max(maxx,score);
}
if(i<j)
{
p+=tokens[j];
--score;
--j;
}
}
return maxx;
}
};