方法一 个人方法 模拟:
维护一个res数组用来记录每一扇区经过的次数
以示例1为例子,n=4
遍历rounds数组,对于rounds[i]和rounds[i+1]进行比较
如果rounds[i]<rounds[i+1],比如[1,3]说明还在同一个圆上,直接对经过的扇区进行累加
如果rounds[i]>rounds[i+1],比如[3,1],说明从上一个圆跑到下一个圆了,要分为两部分进行累加
3-4,4-1
累加的时候应该是左开右闭,因为下一次的起始扇区是上一次的结束扇区,要避免重复计算
用max记录经过扇区的最大次数
var mostVisited = function(n, rounds) {
let res=new Array(n+1).fill(0)
let max=-1
res[rounds[0]]++
for(let i=0;i<rounds.length-1;i++){
if(rounds[i]<=rounds[i+1] && rounds[i+1]<=n){
for(let j=rounds[i]+1;j<=rounds[i+1];j++){
res[j]++
max=Math.max(max,res[j])
}
}else{
for(let j=rounds[i]+1;j<=n;j++){
res[j]++
max=Math.max(max,res[j])
}
for(let j=1;j<=rounds[i+1];j++){
res[j]++
max=Math.max(max,res[j])
}
}
}
let ans=[]
for(let i=0;i<res.length;i++){
if(res[i]===max) ans.push(i)
}
return ans
};
消耗时间和内存情况: