1840 最高建筑高度

题目描述:
在一座城市里,你需要建 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 <= 109
0 <= restrictions.length <= min(n - 1, 105)
2 <= idi <= n
idi 是 唯一的 。
0 <= maxHeighti <= 109

方法1:
主要思路:解题链接汇总
(1)参考官方题解

class Solution {
public:int maxBuilding(int n, vector<vector<int>>& restrictions) {restrictions.push_back({1,0});sort(restrictions.begin(),restrictions.end());if(restrictions.back()[0]!=n){restrictions.push_back({n,n-1});}for(int i=1;i<restrictions.size();++i){restrictions[i][1]=min(restrictions[i][1],restrictions[i][0]-restrictions[i-1][0]+restrictions[i-1][1]);}for(int i=restrictions.size()-2;i>=0;--i){restrictions[i][1]=min(restrictions[i][1],restrictions[i+1][0]-restrictions[i][0]+restrictions[i+1][1]);}int res=restrictions.back()[1];for(int i=1;i<restrictions.size();++i){int diff_height=abs(restrictions[i][1]-restrictions[i-1][1]);int cur_height=max(restrictions[i][1],restrictions[i-1][1]);if(restrictions[i][0]-restrictions[i-1][0]>diff_height){cur_height+=(restrictions[i][0]-restrictions[i-1][0]-diff_height)/2;}res=max(res,cur_height);}return res;}
};


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部