All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0801_0900.s0849_maximize_distance_to_closest_person.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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