Leetcode每日一题:649.dota2-senate(Dota2参议院)
法一:朴素法,也是看完题后最先想到的,从头开始对于每位议员i,从i的后面开始循环找到i的首个未被禁言的敌人j,并把它的rec[j]
置为0,表示被禁言;只有rec[i]!=0
的时候,才说明i未被禁言,才能进入循环发挥i的权利;如果某次循环中找不到i的敌人了,那么说明i阵营胜利;
string predictPartyVictory(string senate)
{int len = senate.size();vector<bool> rec(len, 1);while (true){for (int i = 0; i < len; i++){//如果i没有被禁言if (rec[i]){char target = senate[i] == 'R' ? 'D' : 'R';int num = 0;//从i的后面开始找i的首个未被禁言的敌人,将他禁言for (int j = i + 1; num < len; num++){if (j == len)j = 0;if (rec[j] && senate[j] == target){rec[j] = 0;break;}j++;}//找了一圈都没找到i的敌人,说明i阵营胜利if (num == len)return senate[i] == 'R' ? "Radiant" : "Dire";}}}int i = 0;while (!rec[i])i++;return senate[i] == 'R' ? "Radiant" : "Dire";
}
方法二:贪心法,就是当遍历到R的时候,不要马上去找D把它淘汰掉,而是用一个变量记着,等遍历到D的时候再把它淘汰掉;
string predictPartyVictory(string senate)
{int len = senate.size();int person = 0; //person>0说明存了一个D淘汰R的权限,person<0说明存了一个R淘汰D的权限;bool R = true, D = true;//只要senate中R和D阵营都还有人,那就得继续淘汰while (R && D){R = false;D = false;for (int i = 0; i < len; i++){if (senate[i] == 'D'){D = true;if (person < 0) //里面有R淘汰D的权限,这个D被淘汰senate[i] = '0';person++;}else if (senate[i] == 'R'){R = true;if (person > 0) //里面有D淘汰R的权限,这个R被淘汰senate[i] = '0';person--;}}}return person > 0 ? "Dire" : "Radiant";
}
Leetcode每日一题:649.dota2-senate(Dota2参议院)相关推荐
- Leetcode 每日一题——649. Dota2 参议院
649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决 ...
- LeetCode每日一题--649. Dota2 参议院(贪心 队列)
题目:跳转至 649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
最新文章
- Python多版本pip安装库的问题
- 数组中子数组的最大累乘积
- Python入门100题 | 第049题
- 23种设计模式C++源码与UML实现--访问者模式
- 第一次离线写Blog,先上个图先
- centos下crontab的使用
- Electron的学习笔记
- php 编辑器格式输出_高效PHP开发人员的十大PHP开发工具
- ArcGIS Pro2.5安装步骤(含Pro2.5安装包)
- 马赛克也被破解了!宅男的福音
- 目标建立——SMART法则
- 这一周我学习了什么(一)
- 图像特效---LOMO Filter
- 从未在一起更让人遗憾_从未在一起和最终没有在一起哪个更遗憾
- c语言程序设计第一次月考考试重点,为什么说初三第一次月考很重要
- Java bean中字段命名潜规则,前两个字母要么都大写,要么都小写
- Azure SQL 数据库仓库Data Warehouse (3) DWU
- 腾讯开放平台创建应用的坑,安卓和iOS端如何共用同一个Appid?
- 驾驶证到期换证(SH)
- 单页应用history模式nginx配置
热门文章
- 2018上C语言程序设计(高级)作业-第0次作业
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法...
- 在执行 php artisan key:generate ,报 Could not open input file: artisan 错误
- java 8 foreach获取索引
- Web应用程序的开发步骤
- Java 导出Excel的各种尝试
- Reverse Pairs
- 【ASP.NET Web API教程】3.4 HttpClient消息处理器
- 写了个数码照片的自动分类整理工具
- C#委托和事件的应用Observer模式实例