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;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中文乱码终极解决方案

    java中文乱码终极解决方案转载自这篇文章简单描述:1、get方式乱码:tomcat的server.xml中加URIEncoding="UTF-8"2、post方式乱码:使用过滤器即可解决3、log4j在linux下显示乱码解决方法:log4j配置文件中加一句话即可解决:log4j.appender.logfile.encoding=UTF-8字符集的详细分解:1.概述本文主要包括以下几个方面:编码基本知识,jav…

    2022年7月8日
    21
  • redis 命令参考手册_redis登录命令

    redis 命令参考手册_redis登录命令http://redisdoc.com/index.htmlhttp://doc.redisfans.com

    2025年5月28日
    0
  • Pycharm教程–断点调试「建议收藏」

    Pycharm教程–断点调试「建议收藏」pycharm怎么debug单步调试?首先,打开一个的pycharm的界面当中,需要选中编辑器中的左侧。 然后pycharm的菜单中的run的菜单。点击了run的菜单之后,选中debug的选项。 就可以看到是在编辑器当中的选中一个断点。然后就可以对于当前中的点击下一步中按钮。可以看到是代码就会移动到下一行的代码上了。或者使用快捷键的方式来移动下一步….

    2022年8月27日
    3
  • cmd命令 拷贝某文件夹及其子文件夹文件到其它文件夹

    cmd命令 拷贝某文件夹及其子文件夹文件到其它文件夹

    2022年1月28日
    57
  • 学电脑必知的电脑配置

    学电脑必知的电脑配置电脑的配置,主要看CPU、显卡、主板、内存、硬盘、显示器等,而笔记本的话就看它的品牌就行了。国外的有HP、apple、松下、东芝等,不过顾客口碑和质量比较硬的是DELL和HP这两个品牌;国产的有:宏基、清华紫光、清华同方、神州、海尔、联想、八亿时空等。评价标准1、CPU,这个主要取决于频率和二级缓存,频越高、二级缓存越大,速度越快,未来CPU会有三级缓存、四级缓…

    2022年7月16日
    21
  • 大数据开发常见面试问题总结「建议收藏」

    大数据开发常见面试问题总结「建议收藏」1、简述对大数据组件的理解?Yarn:大数据组件运行的job的管理器 Spark:分布式的利用内存进行分布式运算的大数据组件 Hbase:基于Hadoop的大数据常用数据库 Hive:基于Hadoop的大数据数据仓库,操作和关系型数据库(MySQL)类似2、hdfs文件系统中NameNode和DataNode的区别和联系?NameNode存储了元数据,并且调度,协调整个集群Da…

    2022年6月6日
    77

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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