LeetCode 1560. Most Visited Sector in a Circular Track
原题链接
简单
作者:
孤独时代的罗永浩
,
2020-10-06 13:49:21
,
所有人可见
,
阅读 395
明显是一道差分的题,但是出题人可能精神不太正常,需要特殊判断一些无聊的边界
第一条路径起点和终点都算作一次经过,后面的路径起点不算,需要特别判断
起点小于终点正常差分, 起点大于终点时转换成对剩下部分进行减一操作
class Solution {
public:
vector<int> mostVisited(int n, vector<int>& rounds) {
vector<int> ans;
int f[n + 2];
memset(f, 0, sizeof f);
for(int i = 1; i < rounds.size(); i++)
{
int first = rounds[i - 1];
int second = rounds[i];
if(i == 1)
{
if(second > first)
{
f[first]++;
f[second + 1]--;
}
else
{
f[second + 1] --;
f[first] ++;
}
}
else
{
if(second > first)
{
f[first + 1]++;
f[second + 1]--;
}
else
{
f[second + 1] --;
f[first + 1] ++;
}
}
}
for(int i = 1; i <= n; i++)
{
f[i] = f[i - 1] + f[i];
}
int res = f[1];
ans.push_back(1);
for(int i = 2; i <= n; i++)
{
if(res < f[i])
{
ans.clear();
res = f[i];
}
if(res == f[i])
ans.push_back(i);
}
return ans;
}
};