在一排座位( 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