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

力扣 807. 保持城市天际线(Java实现)_第1张图片

题目分析

        给定一个二维数组,行列长度相等,要保持四个方向仍一观察高度不变的情况下,适当添加建筑高度,问最大高度增量和。所谓四个方向高度不变的增量,其实就是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

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

你可能感兴趣的:(leetcode,算法,职场和发展)