leetcode 649. Dota2 参议院

2023.9.11

先简化一下题意:本题的意思就是每次投票中,前面的议员可以干掉后面的议员(当然是干掉敌对方的),然后他将参与下一次的投票,而被干掉的议员则不能参与投票了。 如:[R D D] -> [R D] ->[R D]->[D] 。 最后活下来的议员则获得胜利。

本题我是用了两个队列存储两个阵营对应的索引,索引小的议员先投票。然后每次投票完之后,将继续参与下一次投票:即在队列中再push一个索引进去,radiant.push(radiant.front() + senate.size()); 然后敌对方队列pop出一个元素,代表被消灭了。 最后哪个队列不为空,哪个队列阵营就获胜了。

代码如下:

cpp 复制代码
class Solution {
public:
    string predictPartyVictory(string senate) {
        queue<int> radiant;
        queue<int> dire;
        for(int i=0; i<senate.size(); i++)
        {
            if(senate[i] == 'R') radiant.push(i);
            else dire.push(i);
        }
        while(!radiant.empty() && !dire.empty())
        {
            if(radiant.front() < dire.front())
            {
                radiant.push(radiant.front() + senate.size());//第二轮还要继续投票
            }
            else
            {
                dire.push(dire.front() + senate.size());
            }
            //一个丧失投票资格,还一个需要等到下一轮才能投票。
            radiant.pop();
            dire.pop();
        }
        if(radiant.empty()) return "Dire";
        return "Radiant";
    }
};
相关推荐
_Vinyoo6 分钟前
算法——分治
数据结构·算法
顾一大人19 分钟前
Python常用排序算法
python·算法·排序算法
小羊在奋斗29 分钟前
【今日三题】小乐乐改数字 (模拟) / 十字爆破 (预处理+模拟) / 比那名居的桃子 (滑窗 / 前缀和)
算法
Dovis(誓平步青云)1 小时前
【数据结构】排序算法(下篇·终结)·解析数据难点
c语言·数据结构·学习·算法·排序算法·学习方法·推荐算法
鹿屿二向箔2 小时前
CCF-GESP(编程能力等级认证)
算法·计算机·考试
想跑步的小弱鸡2 小时前
Leetcode hot 100(last day)
算法·leetcode·哈希算法
愚润求学3 小时前
【C++】list模拟实现
开发语言·数据结构·c++·list
hxung6 小时前
B+树与红黑树
数据结构·b树
龙俊杰的读书笔记7 小时前
[leetcode] 面试经典 150 题——篇9:二叉树(番外:二叉树的遍历方式)
数据结构·算法·leetcode·面试
Swift社区8 小时前
从表格到序列:Swift 如何优雅地解 LeetCode 251 展开二维向量
开发语言·leetcode·swift