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

g1801_1900.s1840_maximum_building_height.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1801_1900.s1840_maximum_building_height;

// #Hard #Array #Math #2022_05_07_Time_59_ms_(94.64%)_Space_93.4_MB_(98.21%)

import java.util.Arrays;
import java.util.Comparator;

/**
 * 1840 - Maximum Building Height\.
 *
 * Hard
 *
 * You want to build `n` new buildings in a city. The new buildings will be built in a line and are labeled from `1` to `n`.
 *
 * However, there are city restrictions on the heights of the new buildings:
 *
 * *   The height of each building must be a non-negative integer.
 * *   The height of the first building **must** be `0`.
 * *   The height difference between any two adjacent buildings **cannot exceed** `1`.
 *
 * Additionally, there are city restrictions on the maximum height of specific buildings. These restrictions are given as a 2D integer array `restrictions` where restrictions[i] = [idi, maxHeighti] indicates that building idi must have a height **less than or equal to** maxHeighti.
 *
 * It is guaranteed that each building will appear **at most once** in `restrictions`, and building `1` will **not** be in `restrictions`.
 *
 * Return _the **maximum possible height** of the **tallest** building_.
 *
 * **Example 1:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/08/ic236-q4-ex1-1.png)
 *
 * **Input:** n = 5, restrictions = \[\[2,1],[4,1]]
 *
 * **Output:** 2
 *
 * **Explanation:** The green area in the image indicates the maximum allowed height for each building. We can build the buildings with heights [0,1,2,1,2], and the tallest building has a height of 2.
 *
 * **Example 2:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/08/ic236-q4-ex2.png)
 *
 * **Input:** n = 6, restrictions = []
 *
 * **Output:** 5
 *
 * **Explanation:** The green area in the image indicates the maximum allowed height for each building. We can build the buildings with heights [0,1,2,3,4,5], and the tallest building has a height of 5.
 *
 * **Example 3:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/08/ic236-q4-ex3.png)
 *
 * **Input:** n = 10, restrictions = \[\[5,3],[2,5],[7,4],[10,3]]
 *
 * **Output:** 5
 *
 * **Explanation:** The green area in the image indicates the maximum allowed height for each building. We can build the buildings with heights [0,1,2,3,3,4,4,5,4,3], and the tallest building has a height of 5.
 *
 * **Constraints:**
 *
 * *   2 <= n <= 109
 * *   0 <= restrictions.length <= min(n - 1, 105)
 * *   2 <= idi <= n
 * *   idi is **unique**.
 * *   0 <= maxHeighti <= 109
**/
public class Solution {
    public int maxBuilding(int n, int[][] restrictions) {
        if (restrictions.length == 0) {
            return n - 1;
        }
        int m = restrictions.length;
        Arrays.sort(restrictions, Comparator.comparingInt(a -> a[0]));
        for (int i = m - 2; i >= 0; i--) {
            restrictions[i][1] =
                    Math.min(
                            restrictions[i][1],
                            restrictions[i + 1][1] + restrictions[i + 1][0] - restrictions[i][0]);
        }
        int id = 1;
        int height = 0;
        int res = 0;
        for (int[] r : restrictions) {
            int currMax;
            if (r[1] >= height + r[0] - id) {
                currMax = height + r[0] - id;
                height = currMax;
            } else {
                currMax = (height + r[0] - id + r[1]) / 2;
                height = r[1];
            }
            id = r[0];
            res = Math.max(res, currMax);
        }
        if (id != n) {
            res = Math.max(res, height + n - id);
        }
        return res;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy