https://leetcode-cn.com/problems/most-visited-sector-in-a-circular-track/
位置的模拟,[开始位置,结束位置],然后从下一个位置开始。
由于旋转,而且从1开始,直接写规则返回相比取余更加方便。
由于包括结束位置,计数器加一后再判断是否要终止,由于需要从下一个位置开始,所以需要保存flag后对位置加1再退出。
struct Node{
int pos;
int cnt;
};
bool operator<(const Node & a,const Node &b){
if(a.cnt!=b.cnt)
return a.cnt>b.cnt;
return a.pos<b.pos;
}
class Solution {
public:
Node nodes[105];
vector<int> mostVisited(int n, vector<int>& rounds) {
for(int i=1;i<=n;i++){
nodes[i].pos=i;
nodes[i].cnt=0;
}
int pos=rounds[0];
for(int i=1;i<rounds.size();i++){
int to=rounds[i];
int flag=0;
while(1){
nodes[pos].cnt++;
if(pos==to){
flag=1;
}
pos++;
if(pos==n+1)
pos=1;
if(flag)
break;
}
}
sort(nodes+1,nodes+1+n);
vector<int> ans;
int max_cnt=nodes[1].cnt;
for(int i=1;i<=n;i++){
if(nodes[i].cnt==max_cnt)
ans.push_back(nodes[i].pos);
else
break;
}
return ans;
}
};