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";
        }
        
    }
}
相关推荐
北冥you鱼4 分钟前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
Lichee208 分钟前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
YDS82919 分钟前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
Shaoshing22 分钟前
LeetCode100 42.接雨水
java·算法·leetcode
枫子有风27 分钟前
卡码网盘项目深挖
java·redis·jwt·es·pgvector
郭小李34 分钟前
springmvc 拦截器
java·开发语言·前端
web打印社区35 分钟前
Chrome-kiosk-printing能上生产吗
开发语言·前端·javascript·chrome·websocket
大风起兮云飞扬丶37 分钟前
Java——日期类
java·开发语言
Wang's Blog1 小时前
Java 项目实战:交友项目 - 联系人管理需求分析
java·开发语言·交友
lazy H1 小时前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408