leetcode649队列操作Dota2

发布时间 2023-07-06 17:28:09作者: iu本u
  • 基本操作

入队:

queue.push()
queue.push_back()//两者效果相同

出队:

queue.pop();
queue.pop_back();//都从尾部操作

考虑两个因素:1.每个参议员的决定都由之后的参议员决定  2.决定禁用之后都不能在投票

queue<int>radiant,dire;//使用两个队列去记录参会的议员再队列中的投票顺序
for(int i=0;i<n;++i){
    if(senate[i]=='R') radiant.push(i);
    if(senate[i]=='D')dire.push(i);
}
while(!radiant.empty()&&!dire.empty()){
     if(radiant.front()>dire.front()){
        dire.push(dire.front()+n);//加n是因为要重新排队,在前面说明不会被淘汰
    } else{
        radiant.push(radiant.front()+n);
    } 
     radiant.pop();
      dire.pop();//1.因为被禁言所以要淘汰2.没有被禁言的因为重新在之后排队所以也要删除现在的位置 
}
return !radiant.empty()?"Radiant":"Dire";