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";
    }
};
相关推荐
BothSavage8 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn8 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽9 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
先吃饱再说1 天前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰1 天前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术1 天前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六1 天前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术1 天前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize1 天前
初识DFS 与 BFS:递归、队列与图遍历
算法