1. 程式人生 > >【JS】到最近的人的最大距離 #陣列 找最大距離

【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

在這裡插入圖片描述