LeetCode——807.保持城市天际线

这篇博客讨论了一个二维数组表示的城市高度问题,其中每个城市可以增加高度但不能超过所在行或列的最大值。文章介绍了算法思路,通过记录行和列的最大值,然后计算每个城市可以增加的最大高度,最后返回所有城市可以增加的高度总和。提供的Java代码实现了这一逻辑。
摘要由CSDN通过智能技术生成

通过万岁!!!

  • 题目:给你一个二维数组,分别表示每个城市(i,j)的高度,然后要求每个城市现在可以增加自己的高度,但是最大的高度不能超过本行或者本列的原来最大值。返回的是城市可以增加的高度和。
  • 思路:先找到行和列的最大值,然后i,j位置增加的高度要小于行和列的最小值即可。
  • 技巧:这里就是需要两个一维数组记录行和列的高度。

伪代码

定义行数组row和列数组col
双层for遍历城市数组
    如果当前城市高度大于行中已知结果,那就替换
    如果当前城市高度大于列中已知结果,那就替换
定义需要返回的高度ans
双层for遍历城市数组
    ans加上本城市节点可以提升的高度(也就是row和col两个里面的最小值-当前高度)
return ans;

java代码

class Solution {
    public int maxIncreaseKeepingSkyline(int[][] grid) {
        int rowMax[] = new int[grid.length];
        int colMax[] = new int[grid[0].length];
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                rowMax[i] = rowMax[i] > grid[i][j] ? rowMax[i] : grid[i][j];
                colMax[j] = colMax[j] > grid[i][j] ? colMax[j] : grid[i][j];
            }
        }
        int ans = 0;
        for (int i = 0; i < grid.length; i++)
            for (int j = 0; j < grid[0].length; j++)
                ans += ((rowMax[i] < colMax[j] ? rowMax[i] : colMax[j]) - grid[i][j]);
        return ans;
    }
}
  • 总结:难度不大,但是需要两次for,并且需要进行内容的记录,然后明确为什么取最大值(要找到本城市能达到的最大值)和为什么又取最小值(行和列都不能超过之前的高度)。这个题应该是也能只用一个双层for,但是应该是里面需要反复计算,或则用记录一些东西,比较麻烦,这里就先这样吧,通过万岁,不管是找工作,还是打比赛,先通过,再优化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值