zoukankan      html  css  js  c++  java
  • [LeetCode] 1840. Maximum Building Height

    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:

    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:

    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:

    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

    最高建筑高度。

    在一座城市里,你需要建 n 栋新的建筑。这些新的建筑会从 1 到 n 编号排成一列。

    这座城市对这些新建筑有一些规定:

    每栋建筑的高度必须是一个非负整数。
    第一栋建筑的高度 必须 是 0 。
    任意两栋相邻建筑的高度差 不能超过  1 。
    除此以外,某些建筑还有额外的最高高度限制。这些限制会以二维整数数组 restrictions 的形式给出,其中 restrictions[i] = [idi, maxHeighti] ,表示建筑 idi 的高度 不能超过 maxHeighti 。

    题目保证每栋建筑在 restrictions 中 至多出现一次 ,同时建筑 1 不会 出现在 restrictions 中。

    请你返回 最高 建筑能达到的 最高高度 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-building-height
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    这道题是 hard。我参考了这个官方题解,写的很好。题目给的是一个一维数组,请你按照数组里给的 restrictions 的要求建造房子,并且房子的高度要按照 restrictions 来。思路和讲解我觉得可以直接参考官方题解,我这里直接贴出代码。

    时间O(nlogn)

    空间O(1)

    Java实现

     1 class Solution {
     2     public int maxBuilding(int n, int[][] r) {
     3         // corner case
     4         if (r == null || r.length == 0) {
     5             return n - 1;
     6         }
     7 
     8         // normal case
     9         // Arrays.sort(r, Comparator.comparingInt(x -> x[0]));
    10         Arrays.sort(r, (a, b) -> a[0] - b[0]);
    11         int len = r.length;
    12         for (int i = len - 2; i >= 0; i--) {
    13             r[i][1] = Math.min(r[i][1], Math.min(r[i][0] - 1, r[i + 1][1] + r[i + 1][0] - r[i][0]));
    14         }
    15 
    16         int maxHeight = (0 + r[0][1] + r[0][0] - 1) / 2;
    17         for (int i = 1; i <= len - 1; i++) {
    18             r[i][1] = Math.min(r[i][1], Math.min(r[i][0] - 1, r[i - 1][1] + r[i][0] - r[i - 1][0]));
    19             maxHeight = Math.max(maxHeight, (r[i - 1][1] + r[i][1] + r[i][0] - r[i - 1][0]) / 2);
    20         }
    21         maxHeight = Math.max(maxHeight, r[len - 1][1] + n - r[len - 1][0]);
    22         return maxHeight;
    23     }
    24 }

    LeetCode 题目总结

  • 相关阅读:
    模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享
    多起点的局部搜索算法(multi-start local search)解决TSP问题(附Java代码及注释)
    爬取一定范围内的地图兴趣点并生成地点分布图
    Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
    Python爬虫系列
    干货 | 蚁群算法求解带时间窗的车辆路径规划问题详解(附Java代码)
    10分钟教你Python爬虫(下)--爬虫的基本模块与简单的实战
    vs code 打开文件时,取消文件目录的自动定位跟踪
    eclipse自动补全导致变量会跟上String后缀的问题解决
    16. nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auditUnitName"
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14707205.html
Copyright © 2011-2022 走看看