以Skyline问题来看hard问题在面试的时候如何解决?
问题:
同问碰到skyline这种题该怎么办。如果直接说出最优解,一看就知道是背过的。。。
回答:
较难的hard题,最好在彻底理解答案的基础上背题。面试官比较看重的是得到这个解法的过程。
追问:
怎么体现这个这个解题的过程呢?
回答:
题目要求的是建筑的剪影,可以抽象为每个固定横坐标上的最高点**(划重点:提取问题核心)。因此这个解法可以分成两部分**:
(1)如何把input转换为线性,从而抽象成扫描线问题(甩名词:sweep line)
(2)扫描线的具体实现
第一部分,如果想要简单扫一遍,数据必须是按x轴排序的。假设我们 start_x 来对 building 排序,则end_x仍然是无序的,这样不好。(此时演技爆棚一拍脑袋想到)我们只需要知道skyline的线段是在哪里开始的,因此在building高度发生变化的X位置进行处理即可。building的开始和结束都算是高度变化,因此可以把 start 和 end 拆开处理,只需要标记 X 位置上的高度数据以及这个高度是开始还是结束。
至于每个X位置数据的具体结构,可以用一个tuple(int h 高度,bool start 表示是开始还是结束),也可以像高票解法一样用正数代表开始、负数代表结束。可以和面试官阐明。
第二部分,主要是如何维持一个高度的queue。
阐明在扫描过程中需要三个操作,插入(遇到start),删除(遇到end),获取最大值(高度更新),因此可能有:
- 因为要取最大值嘛,所以很明显我们试试heap,插入O(logn),max O(1),但是删除是O(n),不太好,我们试试别的;
- balanced bst (c++ ordered map以及java treemap),全场O(logn),通通O(logn);
- 有没有可能优化方法1呢?可以用 hashmap + heap的方式来实现,O(logn) insert, O(logn) remove, O(1) get_max。
第一部分稍微举例说明了一下如何展示思路。
第二部分我认为是装逼重点。能写方法3,就先列出1和2,指出他们的不足,然后提出3。如果懒得实现3,先提出1,再提出2,指出红黑树的时间优于heap,在面试官看来也是对数据结构足够熟练的应用了。
最后记得提出edge case,比如两个building高度相同怎么办(假装思考一下)如果先push start,再pop end,就不会有高度变化的问题了嘛,所以我们重写compare函数的时候注意一下就行了。
以上整个过程,在表演不崩的情况下用5-8分钟来解释,我认为都是可以的。
两年没刷题了,具体细节可能记得不太清楚。最近刚开始当面试官,在演技方面给大家举个栗子
以Skyline问题来看hard问题在面试的时候如何解决?相关推荐
- 面试java项目中解决了什么问题,附源代码
Java培训之后找工作,要准备哪些面试问题?这些问题可能包括:什么是Java?Java如何支持高性能?Java的关键特性是什么?局部变量是什么?什么是实例变量?如何在Java中反转字符串?如何找到两个 ...
- 语言高精度算法阶乘_JavaScript中的算法(附10道面试常见算法题解决方法和思路)...
https://juejin.im/post/6844903811505455118 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度.几乎毫无例外 ...
- 面试官:怎么解决MySQL中的死锁问题?
咱们使用 MySQL 大概率上都会遇到死锁问题,这实在是个令人非常头痛的问题.本文将会对死锁进行相应介绍,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议. 话不多说,开整! ...
- 面试官:SSR解决了什么问题?有做过SSR吗?你是怎么做的?
一.是什么 Server-Side Rendering 我们称其为SSR,意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页 ...
- Java面试题目解析-如何解决Java性能问题
前言 Java性能分析是一门科学和艺术.科学指的是性能分析一般都包括大量的数字.测量和分析:艺术指的是知识.经验和直觉的使用.性能分析的工具或者手段各有千秋,但性能的分析的过程却都大相径庭.本文就已知 ...
- 面试官:如何解决跨域问题(建议收藏)
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 前后端分离大势所趋,跨域问题更是老生常谈,随便用标题去google或百度一下,能搜出一大片解决方案,那么为啥又要写一遍呢,不急往下看. 问 ...
- mysql幻读和不可重复读的区别_面试官:MySQL的可重复读级别能解决幻读吗
Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...
- 【offer去哪了】我一连面试了十个Java岗,统统石沉大海!
首先 给大家说一个我经常观察到的一些同学投递简历和找工作的误区.XX同学留言跟我说,我刚刚收到阿里的HR的面试邀约,我去试试怎么样?我感觉自己准备的差不多了,我想去投一下美团和滴滴,去试试能不能直接进 ...
- 如何让面试官认可你的简历
转载自 如何让面试官认可你的简历 在之前的博客里写了很多面试技巧,这是有个前提: 至少候选人被面试了! 在这个前提下,候选人哪怕失败了,至少也能用实战来检验和校对面试准备的结果,用句比较时髦的话来说 ...
- 面试经验分享|精华版
面试经验分享 曾经有一个年轻人,仅仅入职一个月就缔造了 40 万的价值,他是怎么做到的呢? 那是一个平静的午后,却发生了一件令人意想不到的事情,上班没多久的小王,突然就删除了数据库,准备远走他乡,结果 ...
最新文章
- python中字典的value可以为任意对象_Python对象作为字典值
- MySql 密码忘记了,不用重装
- [Oracle] SQL*Loader 详细使用教程(3)- 控制文件
- 重庆的计算机学校排名2015,2015年计算机考研学校排名
- sql 视图不排序_算法工程师SQL进阶:神奇的自连接与子查询
- pycharm主题设置
- MATLAB基础教程
- 哔哩哔哩手机缓存的m4s音频和视频文件电脑观看?
- AMD新旗舰:短小精悍,干掉双芯卡
- php十六进制加1,二进制110000转化为十六进制
- Excel如何一次性将多行多列表格颠倒行顺序
- 制作u盘winpe启动盘_U盘启动盘制作失败怎么办 U盘启动盘制作失败解决方法【详解】...
- 全连接神经网络的二分类问题
- 微信逆向分析(一)——逆向分析的原理
- web页面性能检测工具Lighthouse
- 3d可视化设备产品场景展示更加直观形象
- verilog ~|
- linux hase数据,Linux取得Redis数据库中hash类型的所有feild或者所有value
- android studio 56 下载网络歌曲 代码
- 计蒜客:Cryptographer's Conundrum