【力扣时间】【807】【中等】保持城市天际线
保持城市天际线
- 1、先看题
- 2、审题
- 3、思路
- 4、开工!
- 5、解读
- 6、提交
- 7、咀嚼
- 8、他人的智慧
- 9、总结
城市天际线?
1、先看题
点我看题
题目的表述并不清楚,而且已经开始铺陷阱了。所要求的四个方向,实际上两个足矣。
由于是看平面,从前看与从后看,从左看与从右看是完全一样的。
2、审题
善加使用手头的工具。对于二维的题,稍微画画图就能明确出思路。
本人是结合手边的小本本,才得出的思路 。
题目略有些唬人,不过结合case还是能清楚地分析出其考点。
让我们来康康一些重点:
- 何为建筑轮廓?这个其实考验了一点大家的空间逻辑,即为一个角度看时,最高的一个大楼的高度。
- case里给足了提示,我们只需要从竖直和水平两个方向分析“天际线”。
- 如何变化建筑的高度,才能保持天际线不变呢?变化后的高度不超过该点所在的边或列上的最高点。
1 < grid.length = grid[0].length <= 50
。grid
数组是一个正方形,且边长最大为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),N为grid
的边长。
由于使用了两个数组,长度也分别为N,故空间复杂度为O(N)
如果真如我猜想有黑科技,辣么是仅遍历了一遍?还是说能有时间复杂度为O(logN)的二次遍历?
8、他人的智慧
抱着以上的猜想,我惯例翻了翻题解。
却并没有什么收获。
从官解到比较热门的各种大牛的题解里,都是类似的解法。
暴力贪心,简单明了的思路。并没有看到黑科技。
但还是放出一些大牛的题解,供大家学习
大牛们不仅写了分析,还画了图,更加明了地讲解了题目。
让社畜画图是不可能的,这辈子都不可能的。除非遇上什么文字实在无法表述的题再说吧。但文字都说不清了,我还可以鸽啊
9、总结
今天的中等题完全没有中等题的面子。能够收获的大概就只有巩固基础了。
总之今天好歹是周一,各位社畜们想必都有自己的砖要搬,辣么就不多写些什么,各位共勉吧。
弔!我唔想返工啊!
【力扣时间】【807】【中等】保持城市天际线相关推荐
- 力扣(简单+中等)50题整理总结
文章目录 前言 一.简单题 1. 两数之和 7. 整数反转 9. 回文数 13. 罗马数字转整数 14. 最长公共前缀 20. 有效的括号 21. 合并两个有序链表 26. 删除有序数组中的重复项 2 ...
- 【力扣时间】【1518】【简单】换酒问题
换酒问题 1.来康题 2.审题 3.思路 4.撸代码 5.解读 6.提交 7.咀嚼 8.他人的智慧 9.总结 周五了,来题简单题安慰下各位社畜. 1.来康题 我是题目 今天的题无愧于简单难度! 题目简 ...
- 【力扣时间】【825】【中等】适龄的朋友
适龄的朋友 1.先看题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.大牛们来了 8.总结 额--首先,这道题我是做出来了,只是解法过于简单粗暴,所以参考价值不大. 本着一半是为了将来的我能 ...
- 【力扣时间】【1036】【困难】逃离大迷宫
逃离大迷宫 1.读题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.学习大牛们 8.总结 困难题来了! 1.读题 题目 今天的困难题属于从来没有接触过的类型. 虽然解法还是基于bfs的,但思 ...
- 【LeetCode】每日一题——保持城市天际线
目录 题目 一起来读题目 主要思路: 代码实现 写法一: 代码解读 结果: 写法二:列表推导式写法 参考文章: 题目 哈哈是不是看懵了啊,俗话说的好:不会写的题目,好好读多几次题目 读不懂,没关系,我 ...
- 力扣1024视频拼接
1.1024. 视频拼接 来源力扣解析:1024力扣题解 难度中等261 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 使用数 ...
- 力扣热门题目简单部分合集(共23道)
文章目录 前言 1.两数之和(哈希表,双指针,数组) 2.有效的括号(栈,哈希表) 3.合并两个有序链表(递归,迭代) 4.最大子数组和(动态规划,分治,贪心) 5.爬楼梯(迭代,递归,动态规划,数学 ...
- LeetCode:807. 保持城市天际线————中等
题目 807. 保持城市天际线 在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度. 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度. 高度 0 也被认为是建筑物. ...
- LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)
807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...
最新文章
- DOM渲染的详细过程
- _findnext()调试中断,发生访问错误,错误定位到ntdll.dll
- 3d地球旋转html,echarts 3D地球实现自动旋转
- java LinkedLis t的26种使用方法
- abv asp是静态网页吗_2019年seo动态网页优化“指南针”
- 和为k的倍数(51Nod-2522)
- 设置 cell点击 背景色
- 街头篮球服务器维护中,雷冥竟然有这能力? 《街头篮球》五一稀有角色能力解析...
- FPGA简单实现数据过采样
- 激光发生器的防浪涌防静电保护
- Win10电脑版微信来消息提醒工具
- welearn考试切屏会有显示吗_welearn随行课堂班级测试答案
- DEDE源码分析与学习之三: member/archives_*.php文件解读
- 记录下公司刻录新版本/repo_kitkat 命令
- Balsamiq 介绍
- 部署k8s集群(k8s集群搭建详细实践版)
- matlab产生对称矩阵
- 43岁,外企经理,公司不和我续签了
- GlusterFS基本概念
- docker容器网络及其配置