【JS】到最近的人的最大距离 #数组 找最大距离

在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。

返回最大距离

输入:[1,0,0,0,1,0,1] 输出:2 ,解释:最大空座是3,向左边或者右边的人最大距离都是2

输入:[1,0,0,0] 输出:3 ,解释:末位距离首位是3

输入:[0, 0, 0, 1, 0, 0, 0, 0, 1] 输出:3 ,解释:虽然中间有4个空座,但是他们最大的距离是2,而最前面的3个空座距离是3

提示:
1 <= seats.length <= 20000
seats 中只含有 0 和 1,至少有一个 0,且至少有一个 1。



解法一:

思路

找到数组中的最大空座位数量 max,再找到最前和最后的空座数 start , end ,返回最大的值,


var maxDistToClosest = function(seats) {
   let max=0,count=0,start=0,end=0;
    for(let i=0;i<seats.length;i++){
        if(seats[i]==0){
            count+=1
        }else{
            count=0
        }
        if(count>max){
            max=count;
        }
    }
    
    for(var i=0;i<seats.length-1;i++){
        if(seats[i]==1) break;
        start+=1
    }
    for(var i=seats.length-1;i>=0;i--){
        if(seats[i]==1) break;
        end+=1
    }
    end = start>end? start : end;
    // console.log(max,end)

    return (Math.ceil(max/2) > end) ? Math.ceil(max/2) : end
};

79 / 79 个通过测试用例
执行用时:92 ms

解法1.1

把上面的代码优化一下


var maxDistToClosest = function(seats) {
    let max=0,count=0,start=0,end=0,s=1,len=seats.length;
    for(let i=0;i<len;i++){
        if(seats[i]==0){
            count+=1; 
            end+=1
            if(s==1) start+=1
        }else{
            s=0; 
            count=0; 
            end=0
        }


        if(count>max) max=count; 
    }
    end=seats[len-1]==0 ? end:0

    
    return Math.max((Math.ceil(max/2)),end,start) 
};

79 / 79 个通过测试用例
执行用时:72 ms

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sphinx1122/article/details/84486660