【贪心+循环队列】Dota2 参议院

这篇文章介绍了如何使用贪心策略和循环队列数据结构解决一个关于参议员投票的游戏问题,通过比较并禁止敌对阵营参议员的投票权利,预测哪一方将取得胜利。
摘要由CSDN通过智能技术生成


/** 贪心+循环队列
 * 思路:当每一个参议员行驶禁止权利时,都禁止即将行驶权利的敌方参议员。
 *       使用两个循环队列,队列中存放位置下标。因此只需要比较两个队列中
 *       处于队头元素的大小,谁小谁执行权利
 * @auther start
 * @create 2024-01-10 16:36
 */
public class L649_N {
    public String predictPartyVictory(String senate) {
        int n = senate.length();
        //r队列存放Radiant阵营的下标,同理d存放Dire阵营的下标。
        Deque<Integer> r = new ArrayDeque<>(), d = new ArrayDeque<>();
        //存放下标位置
        for (int i = 0; i < n; i++) {
            if (senate.charAt(i) == 'R') r.addLast(i);
            else d.addLast(i);
        }
        //取出两个队列中的队头元素,对比下标,下标小的再重新添加到队列中,
        //下标大的不再加入到队列中从而实现禁止该参议员投票的权利
        while (r.size() != 0 && d.size() != 0) {
            int a = r.pollFirst(), b = d.pollFirst();
            //下标加n代表进入下一轮投票
            if (a < b) r.addLast(a + n);
            else d.addLast(b + n);
        }
        //r不为0说明Radiant阵营胜利,同理反之。
        return r.size() != 0 ? "Radiant" : "Dire";
    }
}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值