力扣OJ 948. 令牌放置

妖精的绣舞 提交于 2020-02-01 01:58:19

题目:

你的初始能量为 P,初始分数为 0,只有一包令牌。

令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下:

如果你至少有 token[i] 点能量,可以将令牌置为正面朝上,失去 token[i] 点能量,并得到 1 分。
如果我们至少有 1 分,可以将令牌置为反面朝上,获得 token[i] 点能量,并失去 1 分。
在使用任意数量的令牌后,返回我们可以得到的最大分数。

 

示例 1:

输入:tokens = [100], P = 50
输出:0
示例 2:

输入:tokens = [100,200], P = 150
输出:1
示例 3:

输入:tokens = [100,200,300,400], P = 200
输出:2
 

提示:

tokens.length <= 1000
0 <= tokens[i] < 10000
0 <= P < 10000

 

 

思路:

排序,贪心。注意tokens为空的情况

代码:

class Solution {
public:
    int bagOfTokensScore(vector<int>& tokens, int P) 
    {
        if(tokens.empty())return 0;
        int ans=0;
        sort(tokens.begin(),tokens.end());
        auto it1=tokens.begin();
        auto it2=tokens.end()-1;
        while(it1<=it2){
            if(*it1<=P){
                P-=*it1;
                ans++,it1++;
            }
            else if(ans){
                P-=*it1-*it2;
                it1++,it2--;
            }
            else{
                break;
            }
        }
        return ans;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!