【贪心+循环队列】Dota2 参议院
发布时间:2024年01月10日
/** 贪心+循环队列
* 思路:当每一个参议员行驶禁止权利时,都禁止即将行驶权利的敌方参议员。
* 使用两个循环队列,队列中存放位置下标。因此只需要比较两个队列中
* 处于队头元素的大小,谁小谁执行权利
* @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";
}
}
文章来源:https://blog.csdn.net/m0_62332728/article/details/135508936
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!