1. 问题描述:

Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)。Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:
禁止一名参议员的权利:
参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。
宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。给定一个字符串代表每个参议员的阵营。字母 “R” 和 “D” 分别代表了 Radiant(天辉)和 Dire(夜魇)。然后,如果有 n 个参议员,给定字符串的大小将是 n。以轮为基础的过程从给定顺序的第一个参议员开始到最后一个参议员结束。这一过程将持续到投票结束。所有失去权利的参议员将在过程中被跳过。假设每一位参议员都足够聪明,会为自己的政党做出最好的策略,你需要预测哪一方最终会宣布胜利并在 Dota2 游戏中决定改变。输出应该是 Radiant 或 Dire。

示例 1:

输入:"RD"
输出:"Radiant"
解释:第一个参议员来自 Radiant 阵营并且他可以使用第一项权利让第二个参议员失去权力,因此第二个参议员将被跳过因为他没有任何权利。然后在第二轮的时候,第一个参议员可以宣布胜利,因为他是唯一一个有投票权的人

示例 2:

输入:"RDD"
输出:"Dire"
解释:
第一轮中,第一个来自 Radiant 阵营的参议员可以使用第一项权利禁止第二个参议员的权利
第二个来自 Dire 阵营的参议员会被跳过因为他的权利被禁止
第三个来自 Dire 阵营的参议员可以使用他的第一项权利禁止第一个参议员的权利
因此在第二轮只剩下第三个参议员拥有投票的权利,于是他可以宣布胜利

提示:

给定字符串的长度在 [1, 10,000] 之间.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dota2-senate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 思路分析:

分析题目可以知道主要有两个操作:① 当前党派的议员将另外一个党派的议员踢出局 ② 只剩下一个党派的议员那么当前党派宣布胜利,可以发现位置靠前的议员位置权力是比较大的,所以在踢对方出局的时候应该将位置靠前的对方议员踢出去,所以模拟整个过程即可。我们可以声明两个队列模拟这个过程,一开始的时候记录下每个党派议员的位置,当两个队列都不为空的时候执行整个过程,哪个党派的位置靠前那么当前党派就将对方位置最前面的那个议员踢出局,然后将当前行驶权力的议员的位置加入到队尾,并且我们需要在当前位置上加上n(n为senate的长度)这样表示下一轮模拟的时候位置是越来越大的,也即模拟新的一圈。

3. 代码如下:

import collectionsclass Solution:# 其实是模拟整个过程def predictPartyVictory(self, senate: str) -> str:# 声明两个双端队列来存储各个党派出现的位置这样可以判断行驶权力的顺序r, d = collections.deque(), collections.deque()n = len(senate)for i in range(len(senate)):if senate[i] == "R":r.append(i)else:d.append(i)# 只有当两个队列都非空的时候执行这个过程while r and d:# 位置比对方靠前的议员将对方最靠前的议员踢出局, 并且当前议员需要加入到队尾, 加入到队尾的时候需要加上n表示接下来模拟新的一圈if r[0] < d[0]:r.append(r[0] + n)else:d.append(r[0] + n)# 弹出队首元素r.popleft()d.popleft()if len(r): return "Radiant"return "Dire"

649 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 649. Dota2 参议院 | Python

    649. Dota2 参议院 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/dota2-senate/ 题目 Dota2 的世界里有两个阵营:Ra ...

  4. 力扣649. Dota2参议院 (Java 详细题解)

    649. Dota2 参议院 一.原题题目(中等) 1.1 题目 ​ Dota2 的世界里有两个阵营:Radiant (天辉)和 Dire(夜魇).Dota2 参议院由来自两派的参议员组成.现在参议院 ...

  5. Java实现 LeetCode 649 Dota2 参议院(暴力大法)

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

  6. LeetCode每日一题(Python实现)649.Dota2参议院

    题目 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过程 ...

  7. leetcode 649. Dota2 参议院(贪心算法)

    Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过程的投 ...

  8. LeetCode 649. Dota2 参议院(循环队列)

    文章目录 1. 题目 2. 解题 1. 题目 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游 ...

  9. 649. Dota2 参议院

    题目 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过 ...

最新文章

  1. [20160311]ora-01732.txt
  2. wpf学习笔记---初识xaml标签语言
  3. QuickContact分析及其弹出窗口实现
  4. SAP Spartacus user form去除嵌套label的side effect之一
  5. settimeout需要清除吗_前端20个真正灵魂拷问,前端初级到中级你还需要这个!
  6. js 通用 1000 金额 三位格式化 1,000
  7. 对于模拟交易所引发的思考
  8. 莫比乌斯函数(bzoj 1101: [POI2007]Zap)
  9. Socket 编程实战
  10. python 执行shell_python执行shell命令四法
  11. win98模拟器_安利一款安卓win98模拟小游戏
  12. Lonlife-ACM 1010 - Alarm(找规律+素数打表)
  13. apt cyg 安装php,Windows下安装Cygwin及apt-cyg
  14. DELL EqualLogic PS存储硬盘故障数据恢复
  15. 基于51单片机的PWM控制马达电机调速正反转
  16. 其次坐标,以及和非其次坐标互转
  17. 芝加哥大学计算机科学,芝加哥大学计算机科学排名第32(2018年TFE美国排名)
  18. 西门子S7-200 SMART/828d PLC数据采集、远程调试
  19. 计算机应用技术081203 专业硕士,计算机应用技术专业081203-河南理工大学研究生处...
  20. 谷歌清除浏览器host缓存

热门文章

  1. 【Pytorch项目实战】之迁移学习:特征提取、微调、特征提取+微调、雾霾清除
  2. 全媒舍:网站搭建具有长期宣传效果
  3. 震惊,使用imba.io框架,得到比 vue 快50倍的性能基准
  4. python开源协议gpl_[转载]五种开源协议(GPL,LGPL,BSD,MIT,Apache)
  5. 物联网战略的成败在于开放性
  6. table 斜线表头
  7. 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
  8. java 冬季运动会_2015关于冬天的作文:寒冷的冬天续写
  9. 嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器B、累加器A和程序状态字PSW)
  10. 主流信用卡收款通道点评--转自zencart论坛