目录

一、题目内容

二、解题思路

三、代码


一、题目内容

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] 之间.

二、解题思路

1.分别用两个数组记录R和D出现的位置;

2.R或D中在前面的数字不能在这一轮被淘汰,就加上senate的长度,这样就是代表在下一轮;

3.如果R或者D有一方没有遍历结束,则该方还有人没有被淘汰,则该方胜出;

三、代码

class Solution:def predictPartyVictory(self, senate: str) -> str:l = len(senate)R_q = [0 for _ in range(l)]D_q = [0 for _ in range(l)]l_R, r_R, l_D, r_D = 0, 0, 0, 0for i in range(l):if senate[i] == 'R':R_q[r_R] = ir_R += 1else:D_q[r_D] = ir_D += 1while l_R < r_R and l_D < r_D:if R_q[l_R] < D_q[l_D]:R_q[r_R] = R_q[l_R] + lr_R += 1else:D_q[r_D] = R_q[l_D] + lr_D += 1l_R += 1l_D += 1if l_R < r_R:return "Radiant"else:return "Dire"if __name__ == '__main__':senate = "RDD"s = Solution()ans = s.predictPartyVictory(senate)print(ans)

leetcode_649. Dota2 参议院相关推荐

  1. [Swift]LeetCode649. Dota2 参议院 | Dota2 Senate

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. 贪心 - Dota2 参议院

    Dota2 参议院 贪心+循环队列 对于当前参议院来说,他的最优选择是禁止下一个最先出现的敌方参议员,这样才能保证己方参议院的安全. 具体的实现采用循环队列. class Solution {publ ...

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

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

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

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

  5. 算法刷题打卡第43天:Dota2 参议院

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

  6. leetcode之Dota2参议院

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

  7. leetcode649(Dota2 参议院:循环队列)

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

  8. 649 Dota2 参议院(模拟)

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

  9. 代码随想录——Dota2参议院

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

最新文章

  1. AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—14:10-14:50王亮教授《面向复杂视觉任务的视觉认知计算》
  2. docker WARNING: IPv4 forwarding is disabled. 解决方法
  3. 奇葩说之RTC的那些事
  4. 【雷军】给程序员的五点建议--如何成为编程高手并以此创业
  5. [原创]个人工具 - 对APK极限压缩并对齐的工具(58.ReExtremeZipAndAlignAPK)
  6. mysql创建表失败
  7. 怎样用计算机算代数,计算机与代数-如何计算sqrt-方法和实现 - 小黑电脑
  8. log4cpp 使用完全手册
  9. mPush实战笔记4安装mpush
  10. 计算机在材料科学中的应用实,计算机在材料科学与工程中的应用
  11. 猿人时代java_猿人时代攻略
  12. 降本增效的革命性工具: Share Creators 数字资产管理利器
  13. SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003
  14. 经典组合 堡垒主机构建防火墙系统
  15. word密码忘了怎么解开
  16. Proxifier+Fiddler 抓取PC客户端数据包
  17. (Flutter2) AS导入老项目报错:inheritFromWidgetOfExactType
  18. P1941 [NOIP2014 提高组] 飞扬的小鸟——解题报告
  19. 剪辑技巧,简单几步骤即可混剪出多段视频素材
  20. 泡泡堂msn服务器中断,玩泡泡堂的时候为什么老是出现连接服务器中断 – 手机爱问...

热门文章

  1. OSChina 周二乱弹 —— 生男生女一样好
  2. 计算机系统实验:时序电路实验
  3. Java基础学习必备(2)(继承、多态、修饰符、抽象类、接口)
  4. 大乐透python预测程序_python简易的大乐透数据获取及初步分析
  5. ubuntu 查看mysql版本
  6. 可控定时任务 框架设计实现
  7. 漫谈深度强化学习之基础概念
  8. 问题1477:神奇的幻方
  9. rubik-cube-solver 使用js求解魔方
  10. mfcs100ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义