问题:
同问碰到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),获取最大值(高度更新),因此可能有:

  1. 因为要取最大值嘛,所以很明显我们试试heap,插入O(logn),max O(1),但是删除是O(n),不太好,我们试试别的;
  2. balanced bst (c++ ordered map以及java treemap),全场O(logn),通通O(logn);
  3. 有没有可能优化方法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问题在面试的时候如何解决?相关推荐

  1. 面试java项目中解决了什么问题,附源代码

    Java培训之后找工作,要准备哪些面试问题?这些问题可能包括:什么是Java?Java如何支持高性能?Java的关键特性是什么?局部变量是什么?什么是实例变量?如何在Java中反转字符串?如何找到两个 ...

  2. 语言高精度算法阶乘_JavaScript中的算法(附10道面试常见算法题解决方法和思路)...

    https://juejin.im/post/6844903811505455118 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度.几乎毫无例外 ...

  3. 面试官:怎么解决MySQL中的死锁问题?

    咱们使用 MySQL 大概率上都会遇到死锁问题,这实在是个令人非常头痛的问题.本文将会对死锁进行相应介绍,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议. 话不多说,开整! ...

  4. 面试官:SSR解决了什么问题?有做过SSR吗?你是怎么做的?

    一.是什么 Server-Side Rendering 我们称其为SSR,意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页 ...

  5. Java面试题目解析-如何解决Java性能问题

    前言 Java性能分析是一门科学和艺术.科学指的是性能分析一般都包括大量的数字.测量和分析:艺术指的是知识.经验和直觉的使用.性能分析的工具或者手段各有千秋,但性能的分析的过程却都大相径庭.本文就已知 ...

  6. 面试官:如何解决跨域问题(建议收藏)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 前后端分离大势所趋,跨域问题更是老生常谈,随便用标题去google或百度一下,能搜出一大片解决方案,那么为啥又要写一遍呢,不急往下看. 问 ...

  7. mysql幻读和不可重复读的区别_面试官:MySQL的可重复读级别能解决幻读吗

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...

  8. 【offer去哪了】我一连面试了十个Java岗,统统石沉大海!

    首先 给大家说一个我经常观察到的一些同学投递简历和找工作的误区.XX同学留言跟我说,我刚刚收到阿里的HR的面试邀约,我去试试怎么样?我感觉自己准备的差不多了,我想去投一下美团和滴滴,去试试能不能直接进 ...

  9. 如何让面试官认可你的简历

    转载自  如何让面试官认可你的简历 在之前的博客里写了很多面试技巧,这是有个前提: 至少候选人被面试了! 在这个前提下,候选人哪怕失败了,至少也能用实战来检验和校对面试准备的结果,用句比较时髦的话来说 ...

  10. 面试经验分享|精华版

    面试经验分享 曾经有一个年轻人,仅仅入职一个月就缔造了 40 万的价值,他是怎么做到的呢? 那是一个平静的午后,却发生了一件令人意想不到的事情,上班没多久的小王,突然就删除了数据库,准备远走他乡,结果 ...

最新文章

  1. python中字典的value可以为任意对象_Python对象作为字典值
  2. MySql 密码忘记了,不用重装
  3. [Oracle] SQL*Loader 详细使用教程(3)- 控制文件
  4. 重庆的计算机学校排名2015,2015年计算机考研学校排名
  5. sql 视图不排序_算法工程师SQL进阶:神奇的自连接与子查询
  6. pycharm主题设置
  7. MATLAB基础教程
  8. 哔哩哔哩手机缓存的m4s音频和视频文件电脑观看?
  9. AMD新旗舰:短小精悍,干掉双芯卡
  10. php十六进制加1,二进制110000转化为十六进制
  11. Excel如何一次性将多行多列表格颠倒行顺序
  12. 制作u盘winpe启动盘_U盘启动盘制作失败怎么办 U盘启动盘制作失败解决方法【详解】...
  13. 全连接神经网络的二分类问题
  14. 微信逆向分析(一)——逆向分析的原理
  15. web页面性能检测工具Lighthouse
  16. 3d可视化设备产品场景展示更加直观形象
  17. verilog ~|
  18. linux hase数据,Linux取得Redis数据库中hash类型的所有feild或者所有value
  19. android studio 56 下载网络歌曲 代码
  20. 计蒜客:Cryptographer's Conundrum

热门文章

  1. Unity3D实现3D立体的圆环进度条(圆环百分比、圆环血条)
  2. HR必备基础能力之人性
  3. Windows命令提示符窗口操作命令
  4. 转:免杀技术经验总结[20081215更新]
  5. 深度学习分类常见评价指标:accuracy recall precision specificity sensitivity AUC ROC 曲线
  6. 简单做(ZTD)的十个好习惯总结--转
  7. linux curl证书错误,curl – SSL证书错误
  8. 06-jQuery属性操作
  9. Introductions和Advisors标签
  10. Unity中创建地形和给地形贴图的学习方法