每日一题——LeetCode1560.圆形赛道上经过次数最多的扇区

本文介绍了一种算法,用于模拟在一个给定的圆序列中跟踪每个扇区经过的次数,特别关注于处理从一个圆到另一个圆的情况,以找到访问次数最多扇区的索引。同时讨论了时间和内存消耗情况。
摘要由CSDN通过智能技术生成

方法一 个人方法 模拟:

维护一个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
};

消耗时间和内存情况:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值