LeetCode——1840. 最高建筑高度(Maximum Building Height)[困难]——分析及代码(Java)

news/2025/2/21 18:07:36

LeetCode——1840. 最高建筑高度[Maximum Building Height][困难]——分析及代码[Java]

  • 一、题目
  • 二、分析及代码
    • 1. 传递限制
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

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

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

  • 每栋建筑的高度必须是一个非负整数。
  • 第一栋建筑的高度 必须 是 0 。
  • 任意两栋相邻建筑的高度差 不能超过 1 。

除此以外,某些建筑还有额外的最高高度限制。这些限制会以二维整数数组 restrictions 的形式给出,其中 restrictions[i] = [idi, maxHeighti] ,表示建筑 idi 的高度 不能超过 maxHeighti 。

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

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

示例 1:

输入:n = 5, restrictions = [[2,1],[4,1]]
输出:2
解释:我们可以使建筑高度分别为 [0,1,2,1,2] ,最高建筑的高度为 2 。

示例 2:

输入:n = 6, restrictions = []
输出:5
解释:我们可以使建筑高度分别为 [0,1,2,3,4,5] ,最高建筑的高度为 5 。

示例 3:

输入:n = 10, restrictions = [[5,3],[2,5],[7,4],[10,3]]
输出:5
解释:我们可以使建筑高度分别为 [0,1,2,3,3,4,4,5,4,3] ,最高建筑的高度为 5 。

提示:

  • 2 <= n <= 10^9
  • 0 <= restrictions.length <= min(n - 1, 10^5)
  • 2 <= idi <= n
  • idi 是 唯一的 。
  • 0 <= maxHeighti <= 10^9

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

二、分析及代码

1. 传递限制

(1)思路

每处高度限制都可能对其左、右所有建筑产生影响,因此可先从左向右、从右向左分别遍历传递建筑的高度限制条件,得到各限制处建筑的最高值,再计算每个区间内建筑的最大高度。

(2)代码

class Solution {
    public int maxBuilding(int n, int[][] restrictions) {
        if (restrictions.length == 0)
            return n - 1;
        Arrays.sort(restrictions, new Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] - b[0];
            }
        });
        int m = restrictions.length;
        int[] h = new int[m + 1];//高度限制处建筑的最大高度
        
        h[0] = 0;//第一栋建筑高度为0
        h[1] = Math.min(restrictions[0][1], restrictions[0][0] - 1);
        for (int i = 1; i < m; i++)//从左向右高度限制
            h[i + 1] = Math.min(restrictions[i][1], h[i] + restrictions[i][0] - restrictions[i - 1][0]);
        for (int i = m - 2; i >= 0; i--)//从右向左高度限制
            h[i + 1] = Math.min(h[i + 1], h[i + 2] + restrictions[i + 1][0] - restrictions[i][0]);

        int ans = h[1] + ((restrictions[0][0] - h[1]) >> 1);
        for (int i = 2; i <= m; i++)//统计各区间最大建筑高度
            ans = Math.max(ans, (restrictions[i - 1][0] - restrictions[i - 2][0] + h[i] + h[i - 1]) >> 1);
        ans = Math.max(ans, h[m] + n - restrictions[m - 1][0]);//最后一栋建筑需单独计算
        return ans;        
    }
}

(3)结果

执行用时 :61 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :90.7 MB,在所有 Java 提交中击败了 85.44% 的用户。

三、其他

暂无。


http://www.niftyadmin.cn/n/615913.html

相关文章

kafka auto.offset.reset latest earliest 详解

前言 auto.offset.reset关乎kafka数据的读取&#xff0c;是一个非常重要的设置。常用的二个值是latest和earliest&#xff0c;默认是latest 一&#xff0c;latest和earliest区别 1&#xff0c;earliest 当各分区下有已提交的offset时&#xff0c;从提交的offset开始消费&…

[数学][Vector]

Vector.2D: 加法&#xff1a;ab ( (axbx) , (ayby) ) 意义&#xff1a;a向量和b向量首尾相连。以a的始点为始&#xff0c;以b的终点为终的向量就是ab减法&#xff1a;a-b ( (ax-bx) , (ay-by) ) 意义&#xff1a;两个向量始点重合&#xff0c;从b的终点开始到a的终点结束的向…

LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)

LeetCode——1834. 单线程 CPU[Single-Threaded CPU][中等]——分析及代码[Java]一、题目二、分析及代码1. 优先队列&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 给你一个二维数组 tasks &#xff0c;用于表示…

Flink的window窗口计算

window 类型 Keyed 和 Non-Keyed: 根据上游算子是否为KeyStream类型&#xff0c;如果是则为Keyed窗口&#xff0c;不是则为Non-Keyed窗口。Keyed使用window方法&#xff0c;Non-Keyed使用windowsAll方法。。。

高清电视HDTV概述(1)

高清电视HDTV概述(1)一、概念数字电视&#xff0c;是指从演播室到发射、传输、接收过程中的所有环节均使用数字电视信号&#xff0c;或对该系统所有的信号传播均通过由二进制数字所构成的数字流来完成。高清电视HDTV是DTV标准中最高的一种&#xff0c;即High Definition Televi…

MS-SQL数据库系统表的总结与应用

有一个是用Rollback Transaction来回滚操作 Select * From master.dbo.sysdatabases 查询本数据库信息 ---------------------------------------------------------------------------------------------------------------------------Sysobjects&#xff1a;SQL-SERVER的每…

zookeeper客户端zkCli.sh 的增删改查

前言 zk使用场景非常的多&#xff0c;今天收集了zk操作的客户端指令&#xff0c;供大家参考 登录zk服务命令 ./zkCli.sh -timeout 5000 -server 127.0.0.1:2181 客户端与ZooKeeper建立链接 timeout&#xff1a;超时时间&#xff0c;单位毫秒 r&#xff1a;只读模式&#xf…

你了解zookeeper的基本原理吗

CAP定理 一个分布式系统不可能在满足分区容错性&#xff08;P&#xff09;的情况下同时满足一致性&#xff08;C&#xff09;和可用性&#xff08;A&#xff09;。在此ZooKeeper保证的是CP&#xff0c;ZooKeeper不能保证每次服务请求的可用性&#xff0c;在极端环境下&#xf…