Maximize Distance to Closest Person

medium array two-pointers

Problem

seats[i] is 1 if occupied and 0 otherwise. Choose an empty seat to maximize the distance to the closest person. Return that maximum distance.

Inputseats = [1,0,0,0,1,0,1]
Output2
Sitting at index 2 gives distance 2 to both neighbors.

def maxDistToClosest(seats):
    n = len(seats)
    last = -1
    best = 0
    for i in range(n):
        if seats[i] == 1:
            best = i if last == -1 else max(best, (i - last) // 2)
            last = i
    best = max(best, n - 1 - last)
    return best
function maxDistToClosest(seats) {
  const n = seats.length;
  let last = -1, best = 0;
  for (let i = 0; i < n; i++) {
    if (seats[i] === 1) {
      best = last === -1 ? i : Math.max(best, Math.floor((i - last) / 2));
      last = i;
    }
  }
  best = Math.max(best, n - 1 - last);
  return best;
}
class Solution {
  public int maxDistToClosest(int[] seats) {
    int n = seats.length, last = -1, best = 0;
    for (int i = 0; i < n; i++) {
      if (seats[i] == 1) {
        best = (last == -1) ? i : Math.max(best, (i - last) / 2);
        last = i;
      }
    }
    best = Math.max(best, n - 1 - last);
    return best;
  }
}
class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        int n = seats.size(), last = -1, best = 0;
        for (int i = 0; i < n; i++) {
            if (seats[i] == 1) {
                best = (last == -1) ? i : max(best, (i - last) / 2);
                last = i;
            }
        }
        best = max(best, n - 1 - last);
        return best;
    }
};
Time: O(n) Space: O(1)