2026年--Lc332-649. Dota2 参议院(队列)--java版

1.题目


2.思路

把所有下标看成时间线:

第一轮时间:0,1,2,...,n-1

第二轮时间:n,n+1,...,2n-1

第三轮时间:2n,...

某人第一次在 i 时刻行动,下一次自然在 i+n,再下一次 i+2n......

队列就是在维护"谁下一次最早行动"。

放队尾:表示"他还活着,下一轮还会回来投票"

+n:表示"他的下一次出场发生在下一轮(排到本轮所有人后面)"

3.代码实现

java 复制代码
class Solution {
    public String predictPartyVictory(String senate) {
        int n=senate.length();
        Queue<Integer> ra=new ArrayDeque<Integer>();
        Queue<Integer> di=new ArrayDeque<Integer>();
        for(int i=0;i<n;i++)
        {
            if(senate.charAt(i)=='R')
            {
                ra.offer(i);
            }else{
                di.offer(i);
            }
        }
        while(!ra.isEmpty()&&!di.isEmpty())
        {
            int raInndex=ra.poll();
            int diIndex=di.poll();
            if(raInndex<diIndex)
            {//坐标小的,可以投敌方的反对票。
            //并且可以在下一轮再投敌方反对票,所以要+队列的长度,放在队尾
                ra.offer(raInndex+n);
            }else{
                di.offer(diIndex+n);
            }
        }
        if(!ra.isEmpty())
        {
            return  "Radiant";
        }else{
            return  "Dire";
        }
        
    }
}
相关推荐
Old Uncle Tom10 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
小小小米粒10 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
摇滚侠11 小时前
expdp 查看帮助
java·数据库·oracle
czhc114007566311 小时前
C# 428 线程、异步
开发语言·c#
:12111 小时前
java基础
java·开发语言
SilentSamsara12 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
曹牧12 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
daixin884812 小时前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor
小短腿的代码世界12 小时前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
韦禾水13 小时前
记录一次项目部署到tomcat的异常
java·tomcat