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";
    }
};
相关推荐
-dzk-3 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
风筝在晴天搁浅4 小时前
hot100 78.子集
java·算法
Jasmine_llq4 小时前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪4 小时前
快速进制转换
笔记·算法
m0_706653234 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你914 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233905 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1235 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575345 小时前
分布式任务调度系统
开发语言·c++·算法