807.力扣每日一题7/14 Java(执行用时分布击败100%)

举报
天天困 发表于 2024/07/26 23:12:10 2024/07/26
【摘要】 解题思路首先,需要找到每行和每列的最大高度,这样就能确定每个位置上建筑物能增加高度的上限。然后,遍历矩阵中的每个位置,计算其能增加的高度(由所在行和列的最大高度中的较小值决定)。最后,累加所有能增加的高度,得到最终结果。解题过程初始化两个长度为 n 的整数数组 rowMax 和 colMax ,用于存储每行和每列的最大高度。通过两个嵌套的循环分别计算每行和每列的最大高度,并存储在相应的数组中...

解题思路
首先,需要找到每行和每列的最大高度,这样就能确定每个位置上建筑物能增加高度的上限。
然后,遍历矩阵中的每个位置,计算其能增加的高度(由所在行和列的最大高度中的较小值决定)。
最后,累加所有能增加的高度,得到最终结果。
解题过程
初始化两个长度为 n 的整数数组 rowMax 和 colMax ,用于存储每行和每列的最大高度。
通过两个嵌套的循环分别计算每行和每列的最大高度,并存储在相应的数组中。
初始化一个变量 totalIncrease 为 0,用于累加可增加的高度总和。
再次通过两个嵌套的循环遍历矩阵,对于每个位置,计算其可增加的高度(即行和列最大高度中的较小值减去当前高度),如果可增加高度大于 0 ,则累加到 totalIncrease 中。
时间复杂度
计算每行和每列的最大高度,需要遍历矩阵两次,每次遍历的时间复杂度为 O(n²) 
计算可增加的高度总和,又需要遍历矩阵一次,时间复杂度为 O(n²) 
总的时间复杂度为 O(n²) 
空间复杂度
使用了两个长度为 n 的辅助数组 rowMax 和 colMax ,以及一些固定大小的变量,空间复杂度为 O(n)

class Solution {
    public int maxIncreaseKeepingSkyline(int[][] grid) {
        int n = grid.length;
        int[] rowMax = new int[n];
        int[] colMax = new int[n];
 
        // 计算每行的最大值
        for (int i = 0; i < n; i++) {
            int max = 0;
            for (int j = 0; j < n; j++) {
                max = Math.max(max, grid[i][j]);
            }
            rowMax[i] = max;
        }
 
        // 计算每列的最大值
        for (int j = 0; j < n; j++) {
            int max = 0;
            for (int i = 0; i < n; i++) {
                max = Math.max(max, grid[i][j]);
            }
            colMax[j] = max;
        }
 
        int totalIncrease = 0;
 
        // 计算可增加的高度总和
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int increase = Math.min(rowMax[i], colMax[j]) - grid[i][j];
                if (increase > 0) {
                    totalIncrease += increase;
                }
            }
        }
 
        return totalIncrease;
    }
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。