leetcode-1840. 最高建筑高度

leetcode-1840. 最高建筑高度在一座城市里,你需要建 n 栋新的建筑。这些新的建筑会从 1 到 n 编号排成一列。这座城市对这些新建筑有一些规定:每栋建筑的高度必须是一个非负整数。第一栋建筑的高度 必须 是 0 。任意两栋相邻建筑的高度差 不能超过 1 。除此以外,某些建筑还有额外的最高高度限制。这些限制会以二维整数数组 restrictions 的形式给出,其中 restrictions[i] = [idi, maxHeighti] ,表示建筑 idi 的高度 不能超过 maxHeighti 。题目保证每栋建筑在 res

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在一座城市里,你需要建 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
暴力,会超时,从后往前遍历出来能够到达的最大高度。

class Solution { 
   
public:
    bool cmp(vector<int>&a,vector<int>&b){ 
   
        return a[0] < b[0];
    }
    const int INF = 0x3f3f3f3f;
    int maxBuilding(int n, vector<vector<int>>& restrictions) { 
   
        sort(restrictions.begin(),restrictions.end());
        int res = 0;
        vector<int>maxheight(n,INF);
        int m = restrictions.size();
        for(int i = 0;i < m;i ++){ 
   
            restrictions[i][0] = restrictions[i][0] - 1;
            cout<<restrictions[i][0]<<" ";
        }
        cout<<endl;
        for(int i = m - 1;i >= 0;i --){ 
   
            int prepox = 0;
            if(i >= 1)prepox = restrictions[i - 1][0];
            else prepox = 0;
            int nowheight = min(maxheight[restrictions[i][0]],restrictions[i][1]);
            for(int j = restrictions[i][0];j >= prepox;j --){ 
   
                maxheight[j] = nowheight + restrictions[i][0] - j;
            }
        }
        for(int i = 0;i < n;i ++){ 
   
            cout<<maxheight[i]<<" ";
        }
        cout<<endl;
        int now = 0;
        for(int i = 1;i < n;i ++){ 
   
            now = min(maxheight[i],now + 1);
            res = max(res,now);
        }

        return res;
    }
};

方法2:
limit的传递性,从左从右各扫一遍。

class Solution { 
   
public:
    bool cmp(vector<int>&a,vector<int>&b){ 
   
        return a[0] < b[0];
    }
    const int INF = 0x3f3f3f3f;
    int maxBuilding(int n, vector<vector<int>>& restrictions) { 
   
        restrictions.push_back({ 
   1,0});
        sort(restrictions.begin(),restrictions.end());
        if(restrictions[restrictions.size() - 1][0] != n){ 
   
            restrictions.push_back({ 
   n,n - 1});
        }
        int m = restrictions.size();
        auto &&r = restrictions;
        for(int i = 1;i < m;i ++){ 
   
            r[i][1] = min(r[i][1],r[i - 1][1] + r[i][0] - r[i - 1][0]);
        }
        for(int i = m - 2;i >= 0;i --){ 
   
            r[i][1] = min(r[i][1],r[i + 1][1] + r[i + 1][0] - r[i][0]);
        }
        int res = 0;
        for(int i = 1;i < m;i ++){ 
   
            res = max(res,(r[i][1] + r[i - 1][1] + r[i][0] - r[i - 1][0]) / 2);
        }
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168636.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring batch教程 之 配置Step「建议收藏」

    Spring batch教程 之 配置Step「建议收藏」正如在BatchDomainLanguage中叙述的,Step是一个独立封装域对象,包含了所有定义和控制实际处理信息批任务的序列。这是一个比较抽象的描述,因为任意一个Step的内容都是开发者自己编写的Job。一个Step的简单或复杂取决于开发者的意愿。一个简单的Step也许是从本地文件读取数据存入数据库,写很少或基本无需写代码。一个复杂的Step也许有复杂的业务规则(取决于所实现的方式),并作

  • 使用Python暴力激活成功教程密码

    使用Python暴力激活成功教程密码由于业务需求,今天项目对接了百度云智能的风控系统,注册和登陆保护,想来测试一下性能,用python写了一个脚本,暴力激活成功教程密码,看看会不会触发风控一、首先在本地新建了一个数据库,保存已经试错过的密码CREATETABLE`test`.`pwd`(`id`int(10)NOTNULLAUTO_INCREMENT,`passwod`varchar(20)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLDEFAULT’…

  • MySQL数据库:存储引擎

    MySQL数据库:存储引擎

  • WinSCP怎么导入filezilla中的站点?

    WinSCP怎么导入filezilla中的站点?

  • 电机控制foc算法讲解_电机算法需求

    电机控制foc算法讲解_电机算法需求最近做完了一个直流无刷电机的电机调速项目,查阅了各种大神所写的博客和论文,在这里我只做一下小小的总结;FOC(FiledOrientedControl)是采用数学方法实现三相马达的力矩与励磁的解耦控制。主要是对电机的控制电流进行矢量分解,变成励磁电流IdIdId和交轴电流IqIqIq,励磁电流主要是产生励磁,控制的是磁场的强度,而交轴电流是用来控制力矩,所以在实际使用过程中,我们常…

  • 深入了解ASMM

    深入了解ASMM每一个Oracle的初学者在入门阶段都会接触到SGA/PGA的知识,如果是从10g开始学习那么会多或少会对ASMM有所了解,从使用的角度来说ASMM的出现极大地简化了Oracle内存初始化参数的设置,在ASMM的使用上高级DBA和初学者不会有太大的差别;很多人因此而认为ASMM极大程度地减少了数据库对于专业DBA的依赖:如果我们有一个足够智能的DB,那么为什么还要花费金钱雇佣…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号