【面试试题】7O(N)时间解决的面试题(上)_第1页
【面试试题】7O(N)时间解决的面试题(上)_第2页
【面试试题】7O(N)时间解决的面试题(上)_第3页
【面试试题】7O(N)时间解决的面试题(上)_第4页
【面试试题】7O(N)时间解决的面试题(上)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

O(n)时间解决的面试题(上),七月算法曹鹏2015年5月9日,2/21,提纲,简介一些例题例1名人问题(社会名流问题)例2TrappinginRainWater例3ContainerWithMostWater例4最大间隔问题例501相等的串例6二进制矩阵最多1总结,简介,O(n)是什么注意n是什么规模图:节点?边?扫一遍两头扫双重循环,但是内循环变量不减单调性队列堆栈,3/21,例1名人问题,例1有n个人他们之间认识与否用邻接矩阵表示(1表示认识,0表示不认识),并且A认识B并不意味着B认识A,名人定义为他不认识任何人且所有人都认识他的人。请求出所有名人。分析:最多有几个名人?只有1个!(有两个的话,他们认识不认识?)O(n2)的笨方法,遍历i,检查每个j,是否满足i不认识j且j认识i。,4/21,例1续,O(n)的方法对于两个人i和j如果i认识j,则i显然不是名人,删掉i如果i不认识j,则j显然不是名人,删掉j最终剩余一个人,检查他是否是名人实现1用一个数组保存所有没检查人的编号数组如何删除ai?不保证顺序的时候只要ai=a-n即可,5/21,例1续2,伪代码:时间O(n),空间O(n),6/21,例1续3,实现2优化、优化、再优化能否O(1)空间?“一头扫”ij0.i1没有名人i+1.j1没有名人如果i认识j,删掉ii=j,j=j+1如果i不认识j,删掉jj=j+1,7/21,例1续4,实现3“两头扫”i0,j=n1ij0.i1没有名人j+1.n没有名人如果i认识j,删掉i+i如果i不认识j,删掉j-j,8/21,例2TrappinginRainWater,例2Leetcode42给定每个块高度,求下雨后积水。图对应0,1,0,2,1,0,1,3,2,1,2,1分析:每一块和水高度等于它左面(包括本身)的最大值和右边(包括本身)的最大值里较小的,9/21,例2续,利用“前缀”和“后缀”,10/21,例3ContainerWithMostWater,例3Leetcode11一个数组ai表示数轴上i的位置有一条高度为ai的竖直的线段,把两条线段当作一个容器左右边的高度,问那两条线段组成的容器容积最大?本质是求ij,maxminai,aj*(ji)算法两头扫:i=0,j=n-1,best=0ijbest=max(best,minai,aj*(ji);if(aiaj)+i;else-j;,11/21,例3续1,12/21,例3续2,证明:算法一定扫过最优解关键:如果一边移动到了最优解,另一边还没到最优解,没到的那边高度一定比最优解中较低的边低!(道理:因为x轴上宽度更宽)无论高或者低的那边先到最优解,根据我们的“关键点”,另外那边一定比它还要低,算法会一直移动另外那边到最优解,而高的这边保持不动。,13/21,例4最大间隔问题,例4给定数组a,求下标对i,j满足aiaj,并且ji最大。分析:假设目前最优解是d,对于j,至少要检查ijd1才可能更优记录前缀最小值px=mina0.x倒着循环j,对于每个j看一下pjd1是否=aj,用p“引导”如果前面都比aj大,则这个j得不到更优的解,14/21,例4续,对best的理解,例501相等的串,例5给定一个01串,求它一个最长的子串满足0和1的个数相等。分析:把0看成-1,1当作1,还记得“前缀和”么?需要两个前缀和相等,则这两个前缀和之间的子串满足0的个数和1的个数相等。对前缀和排序?O(nlogn)优化不需要排序前缀和范围是-n.n,我们加上n之后就是0.2n,只要记录第一次出现的位置,16/21,例5续,17/21,本质:用hash代替排序。而当hash值是比较小的非负整数时,可以用做数组下标,例6二进制矩阵中1的个数,例6给定n*n的01方阵,每一行都是降序的(即先连续的一段1,再连续的一段0),求1最多的那行中1的个数?分析:算法1数出每一行的1复杂度O(n2)算法2二分出每一行0和1的分界线复杂度O(nlogn)算法3如果某个位置时1,则向右,是0则向下(我们只需要找到比本行更多的1才有意义!),18/21,例6续,19/21,时间复杂度O(n),总结,其他问题和算法最大子数组和KMP(extend)Manacher最大直方图(单调堆栈)滑动窗口最大值(单调队列)快排Partition过程杨氏矩阵查找荷兰国旗问题FirstMissingPositi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论