目录

题目

一起来读题目

主要思路:

代码实现

写法一:

代码解读

结果:

写法二:列表推导式写法

参考文章:


题目

哈哈是不是看懵了啊,俗话说的好:不会写的题目,好好读多几次题目

读不懂,没关系,我和大家一起读题目

一起来读题目

1)方向问题

所要求的四个方向,实际上两个就够了

因为由于是看平面,

从前看与从后看,

从左看与从右看是完全一样的

2)什么是大楼的高度?

其实就是数组中的值,1代表1层高,2代表2层高

3)如何变化建筑的高度,才能保持天际线不变呢?

就是变化后的高度不超过该点所在的边或列上的最高点

(简单来说就是数值不超过所在和所在上的最高值的最小值

主要思路:

1)先找到所有的行和列最高的数值(就是所有的行和列的最高的层数)

2)每个元素(每栋楼)的行和列最高的数值

取最小的(因为最小的限制着)

我们记行和列最高的数值的 最小值为M

将M减去该位置元素(该栋楼的高度)的差值

加上该位置元素

得到结果 最高可到多少层

代码实现

写法一:

class Solution:def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:row = [max(i) for i in grid] #行的最大column = [max([item[i] for item in grid]) for i in range(len(grid[0]))] #列的最大ans = 0for i in range(len(grid)):for j in range(len(grid[i])):ans += (min(row[i],column[j]) - grid[i][j])return ans

代码解读

1)找到所有的行和列最高的数值

row = [max(i) for i in grid] #行的最大
        column = [max([item[i] for item in grid]) for i in range(len(grid[0]))] #列的最大

结果:

2)for i in range(len(grid)):
            for j in range(len(grid[i])):

遍历数值

for i in range(len(grid)): #遍历行

for j in range(len(grid[i])): #遍历列

写法二:列表推导式写法

代码解析一样的,除了zip内置函数

class Solution:def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:rowsMax, colsMax = [max(g) for g in grid], [max(z) for z in zip(*grid)]return sum(min(rowsMax[i], colsMax[j]) - grid[i][j] for i in range(len(grid)) for j in range(len(grid[0])))

参考文章:

【力扣时间】【807】【中等】保持城市天际线_山峰-CSDN博客

python中zip()函数的用法_张康的博客-CSDN博客_python zip

【LeetCode】每日一题——保持城市天际线相关推荐

  1. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  2. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  3. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  4. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  5. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  6. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  7. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  8. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

  9. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

最新文章

  1. 量子计算机混战:新贵离子 vs 老派超导体
  2. 15-jQuery补充
  3. 机器学习(五)——缓解过拟合
  4. Java设计模式-观察者模式(订阅发布模式)
  5. yolov3损失函数改进_YOLOv3论文解析
  6. 快速设置 App 图标 - iOS/Android
  7. switch 关键字的学习
  8. BarTender怎么打印公式化的三列标签
  9. identity 1 1 mysql_identity在mysql中怎么用啊以下代码的错误在哪里
  10. 反射进行.newInstance()方法,报错Caused by: java.lang.NoSuchMethodException:XXXX.<init>()
  11. 编码器分类及原理和测速应用(含代码)
  12. 最浅显的IE反劫持攻略(转)
  13. 魅族手机Root之后如何恢复
  14. 软件测试工程师APUS一面二面汇总
  15. php script是什么,script是什么意思
  16. tinode客户端安卓版编译手账
  17. 计算机考研基本信息,复旦大学计算机考研基本信息
  18. 推荐几个亲测好用高质量学习SQL的网站(建议收藏)
  19. php+仿微信发红包+负数,php仿微信红包分配算法的实现方法
  20. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。

热门文章

  1. 微信小程序退出功能(退回到微信)
  2. Excel中如何批量合并相同内容单元格
  3. 什么是系统集成(SI)?
  4. python3.6.6安装插件_linux python3.6安装uwsgi报错
  5. 不用无线网卡教你如何用台式机连接WiFi
  6. 开放式运动耳机排行榜,排行榜最高的五款骨传导耳机
  7. 苹果软件扣费申请退款
  8. 制作openstack镜像(qcow2格式的win10系统)
  9. 三点估算法 PERT计划评审技术
  10. 学生学籍管理系统_管理员登陆对学生的信息进行操作