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)
上一篇 2022年8月9日 下午12:00
下一篇 2022年8月9日 下午12:00


相关推荐

  • List转set_JAVA数组转set内容不一致

    List转set_JAVA数组转set内容不一致list集合和set集合的相互转化

    2022年10月9日
    5
  • anaconda添加清华镜像源_anaconda清华镜像源

    anaconda添加清华镜像源_anaconda清华镜像源在安装tensorflow时,不知道怎么了,一直安装不上去,所以重新配置了下镜像安装环境:win10+anaconda3.5删除之前的镜像源,恢复默认状态condaconfig–remove-keychannels添加清华镜像源清华大学开源软件镜像站#添加镜像源condaconfig–addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/maincondaconfig–addchann

    2025年6月25日
    5
  • 图书管理系统的系统设计(图书管理系统任务书)

    图书管理系统设计与实现图书馆人员结构复杂,人员数量有限,涉及方面很广,如果还使用手工操作处理图书借阅问题,工作将非常繁琐,需要大量的人力、物理、财力,极大的浪费了资源,对于图书管理人员来说,图书馆管理包括图书信息管理、图书类别管理、借阅信息管理、管理员信息管理等等。而这些项目在过去靠手工操作,需要手工记录这些事情,不但麻烦,还经常出错,给广大用户带来很多不便,因此,开发这样一套图书馆管理系统软件。让管理员方便的管理图书及用户信息,方便用户查找图书。1、本课程设计的目的(1)掌握企业级应用系统的基本

    2022年4月16日
    36
  • mysql 字符串索引 起始_mysql截取字符串「建议收藏」

    mysql 字符串索引 起始_mysql截取字符串「建议收藏」mysql截取字符串mysql索引从1开始一、mysql截取字符串函数1、left(str,index)从左边第index开始截取2、right(str,index)从右边第index开始截取3、substring(str,index)当index>0从左边开始截取直到结束当index<0从右边开始截取直到结束当index=0返回空4、substring(str,index,…

    2022年6月12日
    96
  • Vim命令合集

    Vim命令合集Vim命令合集命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim直接启动vimvimfilename打开vim并创建名为filename的文件文件命令打开单个文件vimfile同时打开多个文件vimfile1file2file3..

    2022年6月2日
    44
  • BSTR LPSTR LPWSTR CString VARIANT COleVariant variant t CC

    BSTR LPSTR LPWSTR CString VARIANT COleVariant variant t CCVisualC++.NET涉及到ATL/ATLServer、MFC和托管C++等多种编程方式,不仅功能强大而且应用广泛。在编程中,我们常常会遇到ANSI、Unicode以及BSTR不同编码类型的字符串转换操作。本文先介绍基本字符串类型,然后说明相关的类,如CComBSTR、_bstr_t、CStringT等,最后讨论它们的转换方法,其中还包括使用最新ATL7.0的转换类和宏,如CA2C…

    2022年7月18日
    18

发表回复

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

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