保持城市天际线

  • 1、先看题
  • 2、审题
  • 3、思路
  • 4、开工!
  • 5、解读
  • 6、提交
  • 7、咀嚼
  • 8、他人的智慧
  • 9、总结

城市天际线?

1、先看题

点我看题

题目的表述并不清楚,而且已经开始铺陷阱了。所要求的四个方向,实际上两个足矣。
由于是看平面,从前看与从后看,从左看与从右看是完全一样的。

2、审题

善加使用手头的工具。对于二维的题,稍微画画图就能明确出思路。
本人是结合手边的小本本,才得出的思路 。

题目略有些唬人,不过结合case还是能清楚地分析出其考点。
让我们来康康一些重点:

  1. 何为建筑轮廓?这个其实考验了一点大家的空间逻辑,即为一个角度看时,最高的一个大楼的高度。
  2. case里给足了提示,我们只需要从竖直和水平两个方向分析“天际线”。
  3. 如何变化建筑的高度,才能保持天际线不变呢?变化后的高度不超过该点所在的边或列上的最高点。
  4. 1 < grid.length = grid[0].length <= 50grid数组是一个正方形,且边长最大为50.

3、思路

或许二维数组和长串不着边际的说明有些唬到打击。但实际上,这题在中等难度里也只能算是最为简单的题。

例子里给足了剧透。我们只用从横向和纵向两个纬度,来记录数组里的最大值即可。
于是我们需要初始化两个数组,数组长度和grid[][]的边长一致(由于题目保证了grid为正方形,故长宽一样)。
其次,遍历这个二维数组,对每一个点,比较并记录其所在的边和列上的最大值。
为保证变化后的天际线不变,每个点(建筑)能够提高到的高度为何呢?即为该点所在的边和列的最大值中,较低的一方。

想到这,答案应该就呼之欲出了。

4、开工!

public int maxIncreaseKeepingSkyline(int[][] grid) {int[] x = new int[grid[0].length];int[] y = new int[grid.length];for (int i = 0; i < y.length; i++) {for (int t = 0; t < x.length; t++) {//遍历二维数组,计算纵向和横向的最大值x[t] = Math.max(x[t], grid[i][t]);y[i] = Math.max(y[i], grid[i][t]);}}int inc = 0;for (int i = 0; i < y.length; i++) {for (int t = 0; t < x.length; t++) {//比较该点纵向和横向的最大值,获取其较小的一方int min = Math.min(x[t], y[i]);//差值即为此点的建筑能够增加的高度inc += min - grid[i][t];}}return inc;}

测试!提交!一气呵成!
让我不得不感慨今天果然还是一道简单题啊。

5、解读

两个数组,两重遍历。其作用和思路里描述的完全一致,这里也不用过多的解读什么的了。
而且关键语句我也写上了注释。

6、提交

虽然执行耗时仅1ms,但排名却落到了83%。
不知道是在什么地方浪费了些许时间,还是又有黑科技出现。

7、咀嚼

两遍两重循环,时间复杂度为O(N2)Ngrid的边长。
由于使用了两个数组,长度也分别为N,故空间复杂度为O(N)

如果真如我猜想有黑科技,辣么是仅遍历了一遍?还是说能有时间复杂度为O(logN)的二次遍历?

8、他人的智慧

抱着以上的猜想,我惯例翻了翻题解。
却并没有什么收获。
从官解到比较热门的各种大牛的题解里,都是类似的解法。
暴力贪心,简单明了的思路。并没有看到黑科技。

但还是放出一些大牛的题解,供大家学习

大牛们不仅写了分析,还画了图,更加明了地讲解了题目。
让社畜画图是不可能的,这辈子都不可能的。除非遇上什么文字实在无法表述的题再说吧。但文字都说不清了,我还可以鸽啊

9、总结

今天的中等题完全没有中等题的面子。能够收获的大概就只有巩固基础了。
总之今天好歹是周一,各位社畜们想必都有自己的砖要搬,辣么就不多写些什么,各位共勉吧。

弔!我唔想返工啊!

【力扣时间】【807】【中等】保持城市天际线相关推荐

  1. 力扣(简单+中等)50题整理总结

    文章目录 前言 一.简单题 1. 两数之和 7. 整数反转 9. 回文数 13. 罗马数字转整数 14. 最长公共前缀 20. 有效的括号 21. 合并两个有序链表 26. 删除有序数组中的重复项 2 ...

  2. 【力扣时间】【1518】【简单】换酒问题

    换酒问题 1.来康题 2.审题 3.思路 4.撸代码 5.解读 6.提交 7.咀嚼 8.他人的智慧 9.总结 周五了,来题简单题安慰下各位社畜. 1.来康题 我是题目 今天的题无愧于简单难度! 题目简 ...

  3. 【力扣时间】【825】【中等】适龄的朋友

    适龄的朋友 1.先看题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.大牛们来了 8.总结 额--首先,这道题我是做出来了,只是解法过于简单粗暴,所以参考价值不大. 本着一半是为了将来的我能 ...

  4. 【力扣时间】【1036】【困难】逃离大迷宫

    逃离大迷宫 1.读题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.学习大牛们 8.总结 困难题来了! 1.读题 题目 今天的困难题属于从来没有接触过的类型. 虽然解法还是基于bfs的,但思 ...

  5. 【LeetCode】每日一题——保持城市天际线

    目录 题目 一起来读题目 主要思路: 代码实现 写法一: 代码解读 结果: 写法二:列表推导式写法 参考文章: 题目 哈哈是不是看懵了啊,俗话说的好:不会写的题目,好好读多几次题目 读不懂,没关系,我 ...

  6. 力扣1024视频拼接

    1.1024. 视频拼接 来源力扣解析:1024力扣题解 难度中等261 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 使用数 ...

  7. 力扣热门题目简单部分合集(共23道)

    文章目录 前言 1.两数之和(哈希表,双指针,数组) 2.有效的括号(栈,哈希表) 3.合并两个有序链表(递归,迭代) 4.最大子数组和(动态规划,分治,贪心) 5.爬楼梯(迭代,递归,动态规划,数学 ...

  8. LeetCode:807. 保持城市天际线————中等

    题目 807. 保持城市天际线 在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度. 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度. 高度 0 也被认为是建筑物. ...

  9. LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)

    807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...

最新文章

  1. DOM渲染的详细过程
  2. _findnext()调试中断,发生访问错误,错误定位到ntdll.dll
  3. 3d地球旋转html,echarts 3D地球实现自动旋转
  4. java LinkedLis t的26种使用方法
  5. abv asp是静态网页吗_2019年seo动态网页优化“指南针”
  6. 和为k的倍数(51Nod-2522)
  7. 设置 cell点击 背景色
  8. 街头篮球服务器维护中,雷冥竟然有这能力? 《街头篮球》五一稀有角色能力解析...
  9. FPGA简单实现数据过采样
  10. 激光发生器的防浪涌防静电保护
  11. Win10电脑版微信来消息提醒工具
  12. welearn考试切屏会有显示吗_welearn随行课堂班级测试答案
  13. DEDE源码分析与学习之三: member/archives_*.php文件解读
  14. 记录下公司刻录新版本/repo_kitkat 命令
  15. Balsamiq 介绍
  16. 部署k8s集群(k8s集群搭建详细实践版)
  17. matlab产生对称矩阵
  18. 43岁,外企经理,公司不和我续签了
  19. GlusterFS基本概念
  20. docker容器网络及其配置

热门文章

  1. 模糊查找文件和文件夹
  2. ubuntu终端下字体放大缩小快捷键
  3. 速通AOSP,成功编译调试Android源码
  4. centos7搭建ftp服务
  5. 不靠广告联盟也能月赚万元
  6. 分析亚马逊竞争对手Listing的技巧与操作步骤
  7. opencv制作微信小游戏 最强连一连 辅助(2)--dfs深度优先搜索算法
  8. java将silk文件转换成MP3
  9. C# 计算字符串里的汉字多少个.数字多少个.英文多少个.符号和空格多少个
  10. 网络教育计算机和英语难度怎样,网络教育统考大学英语b难吗?