【LeetCode每日一题】——807.保持城市天际线

news2024/11/24 18:29:52

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 矩阵

二【题目难度】

  • 中等

三【题目编号】

  • 1572.矩阵对角线元素的和

四【题目描述】

  • 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid ,其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。
  • 城市的 天际线 是从远处观察城市时,所有建筑物形成的外部轮廓。从东、南、西、北四个主要方向观测到的 天际线 可能不同。
  • 我们被允许为 任意数量的建筑物 的高度增加 任意增量(不同建筑物的增量可能不同) 。 高度为 0 的建筑物的高度也可以增加。然而,增加的建筑物高度 不能影响 从任何主要方向观察城市得到的 天际线 。
  • 在 不改变 从任何主要方向观测到的城市 天际线 的前提下,返回建筑物可以增加的 最大高度增量总和 。

五【题目示例】

  • 示例 1:

    • 在这里插入图片描述
    • 输入:grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
    • 输出:35
    • 解释:建筑物的高度如上图中心所示。用红色绘制从不同方向观看得到的天际线。在不影响天际线的情况下,增加建筑物的高度:gridNew = [ [8, 4, 8, 7],
                                           [7, 4, 7, 7],
                                           [9, 4, 8, 7],
                                           [3, 3, 3, 3] ]
  • 示例 2:

    • 输入:grid = [[0,0,0],[0,0,0],[0,0,0]]
    • 输出:0
    • 解释:增加任何建筑物的高度都会导致天际线的变化。

六【题目提示】

  • n = = g r i d . l e n g t h n == grid.length n==grid.length
  • n = = g r i d [ r ] . l e n g t h n == grid[r].length n==grid[r].length
  • 2 < = n < = 50 2 <= n <= 50 2<=n<=50
  • 0 < = g r i d [ r ] [ c ] < = 100 0 <= grid[r][c] <= 100 0<=grid[r][c]<=100

七【解题思路】

  • 这道题主要是要理解题意,这道题的意思是找出每一行和每一列的最大值,然后看每一个元素增加多少高度不会超过当前这个元素所处行和列最大值中的最小值,这样就不会破坏每个方向观测到的“天际线”
  • 所以我们就遍历整个二维数组,找到每一行和每一列的最大值
  • 然后计算当前元素增加多少高度不会超过当前这个元素所处行和列最大值中的最小值
  • 对二维矩阵中的每个元素都进行上面的操作,然后求和
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n为传入的正方形数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的正方形数组的长度

九【代码实现】

  1. Java语言版
class Solution {
    public int maxIncreaseKeepingSkyline(int[][] grid) {
        int n = grid.length;
        int res = 0;
        int[] rawMax = new int[n];
        int[] colMax = new int[n];
        for(int i = 0;i < n;i++){
            for(int j = 0;j < n;j++){
                rawMax[i] = Math.max(rawMax[i],grid[i][j]);
                colMax[j] = Math.max(colMax[j],grid[i][j]);
            }
        }
        for(int i = 0;i < n;i++){
            for(int j = 0;j < n;j++){
                res += Math.min((rawMax[i] - grid[i][j]),(colMax[j] - grid[i][j]));
            }
        }
        return res;
    }
}
  1. C语言版
int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize)
{
    int n = gridSize;
    int res = 0;
    int* rawMax = (int*)calloc(n, sizeof(int));
    int* colMax = (int*)calloc(n, sizeof(int));
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            rawMax[i] = fmax(rawMax[i], grid[i][j]);
            colMax[j] = fmax(colMax[j], grid[i][j]);
        }
    }
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            res += fmin(rawMax[i] - grid[i][j], colMax[j] - grid[i][j]);
        }
    }
    return res;
}
  1. Python语言版
class Solution:
    def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
        n = len(grid)
        res = 0
        rawMax = [0] * n
        colMax = [0] * n
        for i in range(0, n):
            for j in range(0, n):
                rawMax[i] = max(rawMax[i],grid[i][j])
                colMax[j] = max(colMax[j],grid[i][j])
        for i in range(0, n):
            for j in range(0, n):
                res += min(rawMax[i] - grid[i][j], colMax[j] - grid[i][j])
        return res
  1. C++语言版
class Solution {
public:
    int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
        int n = grid.size();
        int res = 0;
        vector<int> rawMax(n);
        vector<int> colMax(n);
        for(int i = 0;i < n;i++){
            for(int j = 0;j < n;j++){
                rawMax[i] = fmax(rawMax[i],grid[i][j]);
                colMax[j] = fmax(colMax[j],grid[i][j]);
            }
        }
        for(int i = 0;i < n;i++){
            for(int j = 0;j < n;j++){
                res += fmin(rawMax[i] - grid[i][j],colMax[j] - grid[i][j]);
            }
        }
        return res;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】

文章目录 1&#xff1a;费用事实指标分析及实现2&#xff1a;差旅事实指标分析及实现3&#xff1a;网点物料事实指标分析及实现 1&#xff1a;费用事实指标分析及实现 目标&#xff1a;实现DWB层费用报销事实指标表的构建 路径 step1&#xff1a;目标需求step2&#xff1a;数据…

有砟铁路三维地质雷达检测数值模拟研究

有砟铁路三维地质雷达无损检测数值模拟研究 前言 据统计&#xff0c;全国铁路营业里程超过14.63万公里&#xff0c;其中高铁超过3.8万公里&#xff1b;全国铁路路网密度152.3公里/万平方公里。有砟铁路主要建造于2012年以前&#xff0c;截止2012年&#xff0c;全国有砟铁路达…

Baklib: 0代码的在线帮助中心

Baklib是一款0代码的在线帮助中心工具&#xff0c;旨在帮助企业和开发者快速搭建和管理自己的帮助中心。无需编写任何代码&#xff0c;只需几个简单的步骤&#xff0c;即可创建一个功能齐全、易于使用的在线帮助中心。Baklib提供了丰富的功能和灵活的定制选项&#xff0c;使用户…

关于迪文屏文本显示 字库生成

生成 30的字体 界面上显示 屏幕上文本控件的点阵数 为字库生成软件的 宽和高 30 30 字库软件的下载链接 三、汉字字库生成 百度网盘链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1o5t https://blog.csdn.net/qq_34118600/article/details/115469371

「如何优雅有效利用周末和下班时间?」

文章目录 每日一句正能量前言下班的时间规划周末的时间规划提升周末体验感的好方法怎样才能获得充分的休息后记 每日一句正能量 眼望古城街尽&#xff0c;心谱落愁无序&#xff0c;旧时的誓言&#xff0c;曾而相似&#xff0c;河水在遵循河道的指引下&#xff0c;在曲折前进中放…

通过Python调用禅道API

禅道API接口&#xff0c;非REST接口 调试版本&#xff1a;11.3 百度出来的100%都用不了&#xff08;本篇除外...&#xff09;。于是自己修改了网上代码&#xff0c;先get session&#xff0c;再post登录&#xff0c;最后调用产品列表验证&#xff0c;实测通过。 1 import req…

SAP 物料主数据 字段 配额安排 变化

ECC版本 字段‘配额安排’在物料主数据中&#xff0c;可选使用范围 S4新版本 字段‘配额安排’已经隐藏&#xff0c;后台字段去掉了&#xff0c;屏幕字段设置了不可见&#xff0c;系统默认选择了4

流程管理软件:优化工作流程的数字化解决方案

有这么多任务需要跟踪&#xff0c;一个优秀的工作流系统对于项目经理完成他们的工作至关重要。通过使用工作流软件&#xff0c;项目经理可以避免诸如浪费时间和资源、过度风险和损害最终结果等陷阱。他们可以放心&#xff0c;他们的工作将按照正确的顺序完成&#xff0c;并在此…

文件管理:按名称批量归类,简化整理任务!

在数字化时代&#xff0c;我们每天都会面对海量的文件&#xff0c;从文档、图片、视频到音频&#xff0c;各种各样的文件都在我们的电脑中汇聚。然而&#xff0c;你是否曾为找不到需要的文件而烦恼&#xff0c;或者为整理大量文件而头疼&#xff1f;为了帮助大家解决这些问题&a…

P3368 【模板】树状数组 2 (树状数组小进阶)(内附封面)

【模板】树状数组 2 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 x x x&#xff1b; 求出某一个数的值。 输入格式 第一行包含两个整数 N N N、 M M M&#xff0c;分别表示该数列数字的个数和操作的总…

Jenkins 自动化部署实例讲解,另附安装教程!

【2023】Jenkins入门与安装_jenkins最新版本_丶重明的博客-CSDN博客 也可以结合这个互补看 前言 你平常在做自己的项目时&#xff0c;是否有过部署项目太麻烦的想法&#xff1f;如果你是单体项目&#xff0c;可能没什么感触&#xff0c;但如果你是微服务项目&#xff0c;相…

Vue-----package.json

前言 package.json是Node.js应用程序中的配置文件&#xff0c;它在Vue项目中同样非常重要。在Vue中&#xff0c; package.json文件包含了有关你的应用程序的重要信息&#xff0c;如版本号、依赖项、脚本等。 文件结构 package.json文件通常包含以下内容&#xff1a; {"n…

【Matter】基于Ubuntu 22.04 交叉编译chip-tool

编译工程之际&#xff0c;记录一下编译过程&#xff0c;免得后续遗忘&#xff0c;总结下来chip-tool 交叉编译涉及到的知识点&#xff1a; 需要了解如何支持交叉编译&#xff0c;基于GN编译框架需要理解应用库如何交叉编译&#xff0c;理解pkg-config的使用meson 编译&#xf…

Activiity跳转startActivity源码分析Activity启动流程(上)

1.Activity的startActivity 2.也是调用了Activity的startActivityForResult 3.实际还是startActivityForResult 带option的方法&#xff0c;只不过null传过去的 4.接着调用了 Instrumentation的execStartActivity方法 5.然后是IActivityManager的startActivity 6.IActivity…

WebDAV之π-Disk派盘 + Mountain Duck

Mountain Duck是来自国外的一款方便实用,功能强大的云存储空间本地管理工具。它可以帮助我们在windows电脑上将远程 FTP 空间、WebDAV、Swift、S3、Azure、Rackspace、Google Cloud 等云存储服务转入本地进行管理,使用任何应用程序即可打开远程文件,并在本地盘上工作。你可以…

CUDA_CHECK(cudaFree(...))报错CUDA error 1

GPT-3.5太好用了&#xff0c;报错情况如下&#xff1a; 总结一下, 在使用cudaFree释放之前cudaMalloc()分配的GPU内存时&#xff0c;报错cuda error,最有可能的几个原因就是&#xff1a; 试图释放已经释放的gpu内存&#xff0c;在调用cudafree&#xff08;&#xff09;时确保没…

小程序自定义tabBar+Vant weapp

1.构建npm&#xff0c;安装Vant weapp&#xff1a; 1&#xff09;根目录下 &#xff0c;初始化生成依赖文件package.json npm init -y 2&#xff09;安装vant # 通过 npm 安装 npm i vant/weapp -S --production 3&#xff09;修改 package.json 文件 开发者工具创建的项…

c++11 标准模板(STL)(std::basic_ifstream)(四)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ifstream : public std::basic_istream<CharT, Traits> 类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istream…

linux学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…

JDBC的书写

文章目录 基本概念操作数据库方式一&#xff08;不建议使用这种查询&#xff0c;可以sql注入&#xff09;读取properties文件 事务转账示例 获取id连接池 基本概念 持久化:把数据放在磁盘上&#xff0c;断电后还是有数据。使用execute 执行增删改返回false,查返回true 操作数…