LeetCode948-令牌放置
问题:令牌放置
你的初始能量为 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
链接:https://leetcode-cn.com/contest/weekly-contest-112/problems/bag-of-tokens/
分析:
一个游戏,有初始能量,可以选择拿能量换分数,也可以选择拿分数换能量,最终要尽可能多的分数。
那么完全可以将token排序,小的token[i]消耗能量换分数,大的token[i]消耗分数换能量
0.初始分数0,如果初始能量都不能换到最小的token,则无法启动,最终结果0分
1.如果是最后一个,没必要拿能量换分数
2.尽可能的将能量换分数,直到不能交换位置,然后拿分数去换大的token[i]能量
AC Code:
- class Solution {
- public:
- int bagOfTokensScore(vector<int>& tokens, int P) {
- int ret = ;
- sort(tokens.begin(), tokens.end());
- if (tokens.size()== || P < tokens[]) //没有token或者无法启动
- {
- return ;
- }
- //最小值token用来换分,最大值token用来换power,最后一个动作如果是换power,放弃
- //优先换分数,换不了了用分数换power
- int leftindex = ;
- int rightindex = tokens.size()-;
- while (rightindex>=)
- {
- if (rightindex < leftindex)
- {
- break;
- }
- //while (P >= tokens[leftindex] && leftindex<=rightindex)
- while (leftindex < tokens.size() && P >= tokens[leftindex] )
- {
- P -= tokens[leftindex];
- leftindex++;
- ret++;
- }
- if (rightindex <= leftindex)
- {
- break;
- }
- P += tokens[rightindex];
- rightindex--;
- ret--;
- }
- return ret;
- }
- };
其他:
1.第一code
- typedef long long ll;
- typedef vector<int> VI;
- typedef pair<int,int> PII;
- #define REP(i,s,t) for(int i=(s);i<(t);i++)
- #define FILL(x,v) memset(x,v,sizeof(x))
- const int INF = (int)1E9;
- #define MAXN 100005
- class Solution {
- public:
- int bagOfTokensScore(vector<int>& tokens, int P) {
- if (tokens.size() == ) {
- return P >= tokens[] ? : ;
- }
- sort(tokens.begin(), tokens.end());
- int n = tokens.size(), ans = ;
- REP(i,,n/) {
- int p = P, t = ;
- REP(j,,i) {
- if (p < tokens[j]) break;
- p -= tokens[j];
- p += tokens[n - - j];
- t++;
- }
- int sol = ;
- REP(j,t,n-t) {
- if (p >= tokens[j]) {
- p -= tokens[j];
- sol++;
- } else break;
- }
- ans = max(ans, sol);
- }
- return ans;
- }
- };
LeetCode948-令牌放置的更多相关文章
- [Swift]LeetCode948. 令牌放置 | Bag of Tokens
You have an initial power P, an initial score of 0 points, and a bag of tokens. Each token can be us ...
- 二.Go微服务--令牌桶
1. 令牌桶 1.1 原理 我们以 r/s 的速度向桶内放置令牌,桶的容量为 b , 如果桶满了令牌将会丢弃 当请求到达时,我们向桶内获取令牌,如果令牌足够,我们就通过转发请求 如果桶内的令牌数量不够 ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- Keystone API
Keystone身份API简介 Keystone提供REST风格的API, 客户端可以通过HTTP方法和URL操作资源. Keystone有两个主要版本的API, 以及构建在这些核心API上的一些AP ...
- ThinkPHP第二十二天(表单令牌、相对路径、扩展配置载入、$Think获取系统变量、$_SERVER('HTTP_REFERER')前页地址)
1.表单令牌开启配置 'TOKEN_ON'=>true 2.相对路径:在thinkphp中,存在单入口index.php,所以程序中的根目录都是以index.php所在的文件夹为根目录,故用./ ...
- 令牌桶在数据通信QoS流量监管中的应用
令牌桶(Tocken Bucket,以下简称TB)在流量监管(以下简称CAR)功能中完成对流量进行限速的作用.流量监管主要是应用与网络边缘,从而保证核心设备的正常数据处理. 在流量监管的处理过程中,首 ...
- 基于.net的分布式系统限流组件(限流算法:令牌算法和漏斗算法)
转载链接:https://www.cnblogs.com/vveiliang/p/9049393.html 1.令牌桶算法 令牌桶算法是比较常见的限流算法之一,大概描述如下: 1).所有的请求在处理之 ...
- python---django中模板渲染(csrf令牌使用,自定义模板函数)
使用终端,可以更方便的去实验,但是没有提示信息: 在项目目录下: D:\MyPython\day23\HelloWorld>python manage.py shell 开始实验: >&g ...
- CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看这里!—-揭秘令牌桶
概述 春暖花开的时候,大家都开着汽车外出旅游欣赏美丽的风景,却被堵在高速公路上,你是否为此感到痛苦?但如果有一种机制可以评估高速公路上的车流量.控制车流情况,确保进入高速公路的汽车都能在路上安全畅行, ...
随机推荐
- PHP 中获取文件名及路径
1. basename("/mnt/img/image01.jpg")函数:得到文件名;输出结果为:image01.jpg. 使用 basename($uriString) 我们可 ...
- AD Framework 单点登录
单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 中 ...
- IOS NSTimer 定时器用法总结
NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题,将其基本用法总结如下: 一.初始化方法:有五种初始化方法,分别是 + (NSTimer *)ti ...
- vue-cli脚手架构建了项目如何去除Eslint验证(语法格式验证)
Eslint是一个语法检查工具,但是限制很严格,在vue文件里面很多空格都会导致红线,取消的方式如下: 1.创建工程的时候,提示是否启用eslint检测的. Use ESLint to lint yo ...
- 微信小程序:点击预览图片
在开发微信小程序时,开发人员会参考着小程序api来开发小程序,但有的时候根据情况不同很容易出现bug,以下是我在开发小程序时出现的各种bug,在开发时有需要预览图片. 1.xml <view c ...
- Android 使用greenDAO 3.2.2 操作外部数据库
项目开发中有时需要用到一些写死的数据,如公司的产品信息之类的.这就需要我们先把数据库文件保存在资源文件夹下,然后当应用创建时将数据库文件拷到应用安装目录的/databases/文件夹下,然后再对数据进 ...
- python3基础07(进程操作及执行系统级命令等)
#subprocess 创建子进程 连接输入 输出 管道错误,及获取他们的状态,可执行操作系统级的命令# subprocess.run(args, *, stdin=None, input=None, ...
- 定时器new Timer().schedule()的使用
Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 ...
- IFEO 映像文件劫持
“映像劫持”,也被称为“IFEO”(Image File Execution Options) 映像劫持的根本就是被恶意篡改了注册表HKEY_LOCAL_MACHINE\SOFTWARE\Micros ...
- pycharm tab换为4个空格
Edit => find => replace 然后勾上 Regex,上一行输入 \t,下一行输入4个空格.