力扣链接:849. 到最近的人的最大距离 - 力扣(LeetCode)
给你一个数组 seats
表示一排座位,其中 seats[i] = 1
代表有人坐在第 i
个座位上,seats[i] = 0
代表座位 i
上是空的(下标从 0 开始)。
至少有一个空座位,且至少有一人已经坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
解法一:各种补窟窿,终于过了
class Solution {
public:
int maxDistToClosest(std::vector<int>& seats) {
int n = seats.size();
int i,seatsNum = 0,m = 0,j = 0;
for(i=0;i<n;i++){
if(seats[i] == 0){
seatsNum ++;
}
if(seats[i] == 1){
if(seats[0] == 0 && j == 0){
seatsNum = seatsNum *2;
j++;
}
m = std::max(seatsNum,m);
seatsNum = 0;
}
}
m++;
if(seats[n-1] == 0){
return std::max(seatsNum , m/2);
}
return m/2;
}
};
思路很简单,主要是统计零出现的最大长度,之后除以二就好了,主要是要考虑一下关于数组的边界问题,对两种边界情况分别进行讨论,对于首尾项距离不用除二,只需要考虑如何得到首尾零的长度就好。
修改一下格式
class Solution {
public int maxDistToClosest(int[] seats) {
int n = seats.length, res = 0, pre = -1;
for (int i = 0; i < n; ++i) {
if (seats[i] == 1) {
if (pre == -1) {
res = i;
} else {
res = Math.max(res, (i - pre) / 2);
}
pre = i;
}
}
return Math.max(res, n - 1 - pre);
}
}
思路不变,格式修改一下。