力扣 807. 保持城市天际线(Java实现)

news/2025/2/27 12:07:32/

题目分析

        给定一个二维数组,行列长度相等,要保持四个方向仍一观察高度不变的情况下,适当添加建筑高度,问最大高度增量和。所谓四个方向高度不变的增量,其实就是arr[i][j]与同i行最大值同j列最大值之间的最小值的差,有点绕,举例:grid[0][0]的高度增量=同0行最大值8与同0列最大值9之间的最小值,即8的差为8-3=5。同理推出其他位置的增量求和。

思路分析

        用一个行为2列为grid.length的二维数组存储每行每列的最大值,例如第一行最大值存在[0][0],第一列最大值存在[1][0],依此类推。然后重新遍历grid的每个元素进行题目分析所述的操作,计数器+=Math.min(行最大值,列最大值)-grid[i][j]。

代码

class Solution {public int maxIncreaseKeepingSkyline(int[][] grid) {int[][] arr=new int[2][grid.length];//用于存储最大值,第一行都是列最大值,第二行都是行最大值int re=0;//计数器用于返回答案for(int i=0;i<grid.length;i++){//遍历每行int max=-1;//初始化这一行的最大值for(int j=0;j<grid.length;j++){//遍历这一行的每一列值if(max<grid[i][j]){//判断是否更大max=grid[i][j];//更新最大值}}arr[0][i]=max;//每行结束后存储最大值}for(int i=0;i<grid.length;i++){//遍历每列int max=-1;//初始化这一列的最大值for(int j=0;j<grid.length;j++){//遍历这一列的每一行值if(max<grid[j][i]){//判断是否更大max=grid[j][i];//更新最大值}}arr[1][i]=max;//每列结束后存储最大值}for(int i=0;i<grid.length;i++){//遍历每行for(int j=0;j<grid.length;j++){//遍历每个元素re+=Math.min(arr[0][j],arr[1][i])-grid[i][j];
//Math.min(对应行最大值,对应列最大值)-这个元素,得到可以增加的高度}}return re;//返回答案}
}

        感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。


http://www.ppmy.cn/news/1575247.html

相关文章

物联网综合实训室建设方案的探讨(职业院校物联网综合实训室建设方案)

随着物联网技术的迅猛发展&#xff0c;社会对物联网人才的需求日益增加。为了满足这一需求&#xff0c;高校和职业院校纷纷开始建设物联网综合实训室&#xff0c;以培养具备实际操作能力和创新思维的高素质物联网人才。本文旨在探讨一种行之有效的物联网综合实训室建设方案&…

C# 弃元的使用

总目录 前言 在C# 7.0及更高版本中&#xff0c;弃元&#xff08;Discard&#xff09;是一个新的语言特性&#xff0c;允许开发者在特定情况下忽略某些值。弃元用下划线 _ 作为占位符&#xff0c;明确表示忽略某个值&#xff0c;提升代码可读性 一、弃元是什么&#xff1f; 1.…

AWS S3 如何设置公开访问权限?

1.让整个bucket都有公开访问权限 1.1关闭【阻止公共读】 1.2关闭ACL访问控制 1.3打开桶策略 这样桶内所有的图片就能访问了 2.只开放特定文件让其具有访问权限&#xff1f; 2.1关闭【阻止公共读】 如之前的图示 2.2打开ACL控制 2.3单个文件打开公共读

第二十六: 【存储+读取数据】

Store是一个保存&#xff1a;状态、业务逻辑 的实体&#xff0c;每个组件都可以读取、写入它。 它有三个概念&#xff1a;state、getter、action&#xff0c;相当于组件中的&#xff1a; data、 computed 和 methods。 具体编码&#xff1a;src/store/count.ts // 引入define…

车载DoIP诊断框架 --- 连接 DoIP ECU/车辆的故障排除

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

微软云和金山云和k8有什么区别

Kubernetes&#xff08;K8s&#xff09;和微软云&#xff08;Microsoft Cloud&#xff09;是两种不同的技术&#xff0c;分别用于不同的目的。Kubernetes是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序&#xff0c;而微软云是一个提供多种云服…

js 判断数据是否为blob类型,blob数据转JSON和对象

判断数据是否为blob类型 function isBlob(obj) {return obj instanceof Blob; }blob数据转JSON和对象 let blob data;var reader new FileReader();reader.readAsText(blob, utf-8);reader.onload function (e) {let res JSON.parse(reader.result);}reader.onerror fun…

【十二】Golang 映射

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…