法一:朴素法,也是看完题后最先想到的,从头开始对于每位议员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参议院)相关推荐

  1. Leetcode 每日一题——649. Dota2 参议院

    649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决 ...

  2. LeetCode每日一题--649. Dota2 参议院(贪心 队列)

    题目:跳转至 649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏 ...

  3. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  4. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  7. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  8. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  9. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  10. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

最新文章

  1. Python多版本pip安装库的问题
  2. 数组中子数组的最大累乘积
  3. Python入门100题 | 第049题
  4. 23种设计模式C++源码与UML实现--访问者模式
  5. 第一次离线写Blog,先上个图先
  6. centos下crontab的使用
  7. Electron的学习笔记
  8. php 编辑器格式输出_高效PHP开发人员的十大PHP开发工具
  9. ArcGIS Pro2.5安装步骤(含Pro2.5安装包)
  10. 马赛克也被破解了!宅男的福音
  11. 目标建立——SMART法则
  12. 这一周我学习了什么(一)
  13. 图像特效---LOMO Filter
  14. 从未在一起更让人遗憾_从未在一起和最终没有在一起哪个更遗憾
  15. c语言程序设计第一次月考考试重点,为什么说初三第一次月考很重要
  16. Java bean中字段命名潜规则,前两个字母要么都大写,要么都小写
  17. Azure SQL 数据库仓库Data Warehouse (3) DWU
  18. 腾讯开放平台创建应用的坑,安卓和iOS端如何共用同一个Appid?
  19. 驾驶证到期换证(SH)
  20. 单页应用history模式nginx配置

热门文章

  1. 2018上C语言程序设计(高级)作业-第0次作业
  2. 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法...
  3. 在执行 php artisan key:generate ,报 Could not open input file: artisan 错误
  4. java 8 foreach获取索引
  5. Web应用程序的开发步骤
  6. Java 导出Excel的各种尝试
  7. Reverse Pairs
  8. 【ASP.NET Web API教程】3.4 HttpClient消息处理器
  9. 写了个数码照片的自动分类整理工具
  10. C#委托和事件的应用Observer模式实例