当前位置: 首页 > news >正文

数据结构与算法之贪心: LeetCode 649. Dota2 参议院 (Ts版)

Dota2 参议院

  • https://leetcode.cn/problems/dota2-senate/

描述

  • Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)

  • Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的 一 项:

    • 禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失 所有的权利 。
    • 宣布胜利:如果参议员发现有权利投票的参议员都是 同一个阵营的 ,他可以宣布胜利并决定在游戏中的有关变化
  • 给你一个字符串 senate 代表每个参议员的阵营。字母 ‘R’ 和 'D’分别代表了 Radiant(天辉)和 Dire(夜魇)。然后,如果有 n 个参议员,给定字符串的大小将是 n

  • 以轮为基础的过程从给定顺序的第一个参议员开始到最后一个参议员结束。这一过程将持续到投票结束。所有失去权利的参议员将在过程中被跳过

  • 假设每一位参议员都足够聪明,会为自己的政党做出最好的策略,你需要预测哪一方最终会宣布胜利并在 Dota2 游戏中决定改变。输出应该是 “Radiant” 或 “Dire”

示例 1

输入:senate = "RD"
输出:"Radiant"

解释:
第 1 轮时,第一个参议员来自 Radiant 阵营,他可以使用第一项权利让第二个参议员失去所有权利
这一轮中,第二个参议员将会被跳过,因为他的权利被禁止了
第 2 轮时,第一个参议员可以宣布胜利,因为他是唯一一个有投票权的人

示例 2

输入:senate = "RDD"
输出:"Dire"

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

提示

  • n == senate.length
  • 1 <= n <= 1 0 4 10^4 104
  • senate[i] 为 ‘R’ 或 ‘D’

Typescript 版算法实现


1 ) 方案1:贪心 + 「循环」队列

function predictPartyVictory(senate: string): string {const n = senate.length;const radiant = [], dire = [];for (const [i, ch] of Array.from(senate).entries()) {if (ch === 'R') {radiant.push(i);} else {dire.push(i);}}while (radiant.length && dire.length) {if (radiant[0] < dire[0]) {radiant.push(radiant[0] + n);} else {dire.push(dire[0] + n);}radiant.shift();dire.shift();}return radiant.length ? "Radiant" : "Dire";
};

2 ) 方案2:优化版

function predictPartyVictory(senate: string): string {const queue = senate.split('')const stack = []while (queue[0]) {const s = queue.shift()if (stack.length === 0 || stack[stack.length - 1] === s) {stack.push(s)continue;}queue.push(stack.pop())}return stack.pop() === 'R' ? "Radiant" : "Dire"
};
http://www.lryc.cn/news/526028.html

相关文章:

  • 西藏酥油茶:高原上的醇香温暖
  • 【模型】RNN模型详解
  • C++----STL(list)
  • 数据结构——AVL树的实现
  • 知识图谱在个性化推荐中的应用:赋能智能化未来
  • C语言自定义数据类型详解(一)——结构体类型(上)
  • 使用 Tailwind CSS + PostCSS 实现响应式和可定制化的前端设计
  • 巧用多目标识别能力,帮助应用实现智能化图片解析
  • 算法中的移动窗帘——C++滑动窗口算法详解
  • AcWing 3585:三角形的边 ← sort() 函数
  • 阿里云-银行核心系统转型之业务建模与技术建模
  • MySQL核心知识:春招面试数据库要点
  • Hive之加载csv格式数据到hive
  • Java web与Java中的Servlet
  • kafka常用目录文件解析
  • RV1126+FFMPEG推流项目源码
  • ANSYS SimAI
  • hedfs和hive数据迁移后校验脚本
  • 蓝桥杯单片机(八)定时器的基本原理与应用
  • 刷题总结 回溯算法
  • C++ 静态变量static的使用方法
  • Langchain+文心一言调用
  • 20250124 Flink中 窗口开始时间和結束時間
  • Android Studio安装配置
  • 设计模式Python版 单例模式
  • 7-Zip高危漏洞CVE-2025-0411:解析与修复
  • python实现http文件服务器访问下载
  • 《一文讲透》第4期:KWDB 数据库运维(6)—— 容灾与备份
  • ArcGIS10.2 许可License点击始终启动无响应的解决办法及正常启动的前提
  • Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250124