力扣每日一题(九)

仅以此纪录每日LootCode所刷题目

题目描述:

力扣每日一题(九)

示例:

力扣每日一题(九) 

思路:

这个题如果读懂了,思路还是比较简单的,话不多说直接上图:

力扣每日一题(九) 

当时做题是中文版的,没有这张图想了好久。做完之后才发现英文版里有图...其实这个就是从四周看我们只能看到每行每列最高的建筑物,我们可以随意增加建筑物的高度,只要不改变我们所能看到的最高的高度即可。

在代码中,我首先将行和列的最高高度放在了两个数组里,之后合并在一起,从这些最高高度中的最低高度开始(有点绕口,但确是如此,如果不从他们中的最低高度开始,就与改变天际线),将最低高度所对应的行或者列的高度补齐,之后将这一行或者列的高度设为101,这样之后补齐别的行或者列的时候就不会涉及到已经补齐过的位置。补齐的高度差值使用count记录下来。

代码:

class Solution:
    def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
        count = 0
        max_col = []
        max_row = []
        for i in range(len(grid)):
            max_row.append(max(grid[i]))
        for i in range(len(grid)):
            col = []
            for j in range(len(grid[0])):
                col.append(grid[j][i])
            max_col.append(max(col))
        max_all =  sorted(max_row + max_col)
        for i in range(len(max_all)):
            if max_all[i] in max_row:
                a = max_row.index(max_all[i])
                for j in range(len(grid[0])):
                    if grid[a][j] != 101:
                        count += (max_all[i] - grid[a][j])
                        grid[a][j] = 101
                max_row[a] = 101
            else:
                b = max_col.index(max_all[i])
                for k in range(len(grid)):
                    if grid[k][b] != 101:
                        count += (max_all[i] - grid[k][b])
                        grid[k][b] = 101
                max_col[b] = 101
        return count

上一篇:695. 岛屿的最大面积


下一篇:827. 最大人工岛