力扣每日一题(九——保持城市天际线)

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

题目描述:

示例:

思路:

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

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

在代码中,我首先将行和列的最高高度放在了两个数组里,之后合并在一起,从这些最高高度中的最低高度开始(有点绕口,但确是如此,如果不从他们中的最低高度开始,就与改变天际线),将最低高度所对应的行或者列的高度补齐,之后将这一行或者列的高度设为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值