【JS】到最近的人的最大距離 #陣列 找最大距離
阿新 • • 發佈:2018-11-30
在一排座位( 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
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