原题如下:
https://leetcode-cn.com/problems/maximize-distance-to-closest-person/
题解
方法一
此题的本质就是根据计算连续0的个数来计算出离最近距离的座位的最大值,但是需要分两种情况来考虑:首尾处的连续0的个数直接就是在这个区间里面离最近的人距离的最大值,在中间的时候,离最近的人距离的最大值就是连续0个数加1后再除以2的结果。
本思路java代码示例:
/*
*@v7fgg
*执行用时 :2 ms, 在所有 Java 提交中击败了99.01%的用户
*内存消耗 :41.6 MB, 在所有 Java 提交中击败了11.11%的用户
*2020年6月15日 12:16
*/
class Solution {
public int maxDistToClosest(int[] seats) {
//开头结尾最大的连续0个数,中间的加1后除以2
int ans=0;
int ansT=0;
int firstOne=-1;//第一个1出现的位置
//先考虑一下开头有0的情况
for(int k=0;k<seats.length;k++){
if(seats[k]==0){ansT++;}
else{
firstOne=k;
ans=Math.max(ansT,ans);
ansT=0;
break;
}
}
//再考虑不是头尾的连续0,也就是遇到1的时候要更新ans并置零ansT
for(int i=firstOne;i<seats.length;i++){
if(seats[i]==0){
//这里已经考虑到了末尾的0,不过,在循环里面没有进行更新
ansT++;
}
else{
ans=Math.max((ansT+1)/2,ans);
ansT=0;
}
//最后在返回句中更新末尾连续0
}return Math.max(ans,ansT);
}
}