LeetCode刷题笔记 948. 令牌放置

题目描述

你的初始能量为 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值