g0801_0900.s0849_maximize_distance_to_closest_person.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0801_0900.s0849_maximize_distance_to_closest_person;
// #Medium #Array #2022_03_24_Time_1_ms_(100.00%)_Space_44_MB_(92.64%)
/**
* 849 - Maximize Distance to Closest Person\.
*
* Medium
*
* You are given an array representing a row of `seats` where `seats[i] = 1` represents a person sitting in the ith
seat, and `seats[i] = 0` represents that the ith
seat is empty **(0-indexed)**.
*
* There is at least one empty seat, and at least one person sitting.
*
* Alex wants to sit in the seat such that the distance between him and the closest person to him is maximized.
*
* Return _that maximum distance to the closest person_.
*
* **Example 1:**
*
* ![](https://assets.leetcode.com/uploads/2020/09/10/distance.jpg)
*
* **Input:** seats = [1,0,0,0,1,0,1]
*
* **Output:** 2
*
* **Explanation:**
*
* If Alex sits in the second open seat (i.e. seats[2]), then the closest person has distance 2.
*
* If Alex sits in any other open seat, the closest person has distance 1.
*
* Thus, the maximum distance to the closest person is 2.
*
* **Example 2:**
*
* **Input:** seats = [1,0,0,0]
*
* **Output:** 3
*
* **Explanation:**
*
* If Alex sits in the last seat (i.e. seats[3]), the closest person is 3 seats away.
*
* This is the maximum distance possible, so the answer is 3.
*
* **Example 3:**
*
* **Input:** seats = [0,1]
*
* **Output:** 1
*
* **Constraints:**
*
* * 2 <= seats.length <= 2 * 104
* * `seats[i]` is `0` or `1`.
* * At least one seat is **empty**.
* * At least one seat is **occupied**.
**/
public class Solution {
private int maxDist = 0;
public int maxDistToClosest(int[] seats) {
for (int i = 0; i < seats.length; i++) {
if (seats[i] == 0) {
extend(seats, i);
}
}
return maxDist;
}
private void extend(int[] seats, int position) {
int left = position - 1;
int right = position + 1;
int leftMinDistance = 1;
while (left >= 0) {
if (seats[left] == 0) {
leftMinDistance++;
left--;
} else {
break;
}
}
int rightMinDistance = 1;
while (right < seats.length) {
if (seats[right] == 0) {
rightMinDistance++;
right++;
} else {
break;
}
}
int maxReach;
if (position == 0) {
maxReach = rightMinDistance;
} else if (position == seats.length - 1) {
maxReach = leftMinDistance;
} else {
maxReach = Math.min(leftMinDistance, rightMinDistance);
}
maxDist = Math.max(maxDist, maxReach);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy