面试
tyler_download
这个作者很懒,什么都没留下…
展开
-
一道看似简单的面试算法题所隐藏的潜在意图
大家面试历程中有没有经历过类似情况,面试官给出一道算法题,看似不难,你三下五除二搞定了,时间和空间效率都是最优,你乐呵呵以为offer,已经到手,结果左等右等,望穿秋水,面试的结果却是无疾而终,你反复确认,觉得题做得没错啊,为什么会失败呢。我就有过类似的情况,后来反复思考,才明白,其实我没明白简单的表面其实隐藏着潜在的考察点。举个栗子,一道常用的面试算法题是:给你一个链表,让你将链表反转。原创 2015-11-11 17:45:51 · 1508 阅读 · 0 评论 -
二叉树面试算法:空间复杂度为 O(1)的Morris遍历法
本节要讲的Morris遍历法,能以O(1)的空间复杂度实现二叉树的中序遍历原创 2017-05-22 11:56:11 · 3077 阅读 · 0 评论 -
算法面试题:逆时针打印二叉树外围边缘
本文研究了二叉树外部边缘的逆时针遍历算法原创 2017-06-17 17:34:12 · 1980 阅读 · 1 评论 -
面试算法:如何利用堆排序实现系统的Timer机制
本文讲解了如何利用堆排序实现系统Timer机制原创 2017-07-21 15:55:18 · 773 阅读 · 0 评论 -
面试算法:波浪型数组的快速排序法
波浪型数组是具备这样特性的数组,它的元素先是递增,到达某个点后开始低贱,接着达到某个点时又递增,接着右递减。我们看看如何依赖堆排序对波浪形数组进行快速有效的排序。原创 2017-08-04 11:00:22 · 1595 阅读 · 0 评论 -
面试算法:lg(k)时间查找两个排序数组合并后第k小的元素
如何在log(k)时间内查找两排序数组合并后第k小的元素原创 2017-10-11 15:22:06 · 914 阅读 · 0 评论 -
面试算法:二分查找法寻找数组截断点
用二分查找法寻找数组截断点原创 2017-11-22 17:20:20 · 1434 阅读 · 0 评论 -
如何进入Google,面试算法之道:在二维数组中的快速查找
给定一个二维数组,它的行和列都是已经按升序排列,请设计一个算法,对于给定某个值x,判断该值是否包含在数组中。例如给定一个二维数组如下: A = { {2, 4, 6, 8 , 10}, {12, 14, 16, 18, 20}, {22, 24, 26, 28, 30}, {32, 34,原创 2018-01-15 17:04:12 · 337 阅读 · 0 评论 -
BAT面试算法:在海量数据中快速查找第k小的条目
像BAT这种巨型互联网公司每天都要出来海量数据。假设从服务器上产生的数据条目数为n,这个值是事先不知道的,唯一确定的是这个值非常大,假定项目需要快速从这n条数据中查找第k小的条目,其中k的值是事先能确定的,请你设计一个设计一个满足需求并且兼顾时间和空间效率的算法。这个题目的难度有若干处,第一是数据数n无法确定,你无法动态的分配合适的空间来存储数据。其次是数据条目数n相当大,如果直接根据n来分配...原创 2018-03-13 12:29:41 · 592 阅读 · 0 评论 -
面试算法:在未知长度的排序数组中进行快速查找
假设A是一个排好序的数组,但是它的长度,我们无法得知。如果我们访问的元素超出了数组长度,那么就会引发一次异常,请设计一个有效算法,输入数组A以及一个数值k,找到一个下标i,使得A[i] = k, 返回-1,如果数组A中不存在等于k的元素。这道题跟我们以前处理的查找问题不同之处在于,数组A的长度无法确定。如果数组A长度确定的话,那么问题就退化为一个在排序数组中进行查找的问题,此时我们依靠二分查找...原创 2018-07-02 18:09:42 · 1134 阅读 · 0 评论 -
面试算法:在未知长度的超大数组中线性时间内查找第k大的元素
给定一个长度为n的数组,n是一个很大的值,而且事先不知道n的大小,给定一个确定的数值k,要求设计一个找出数组中第k大的元素,要求算法需要的空间不能超过O(k)。这个题目的处理有两个麻烦点,第一是它的总长度n不能提前知道,第二点在于题目对算法的空间有限定。对于找到第k小元素这类题目,一般的解法都是使用堆,例如我们先从数组中拿到k个元素,然后在k个元素上构造一个大堆,接着依次读入后续元素,如果读到...原创 2018-07-31 08:46:37 · 600 阅读 · 0 评论 -
快速在组合中查找重复和遗失的元素
给定一个集合: 它包含n个元素,每个元素都是一个数字,对于另一个集合A,它所有的元素都来自集合Z,现在已知的是,A中的集合相比于Z,它缺失了其中一个元素,同时有一个元素从复了两次,假设A中,元素xnxnx_n,缺失了,然而xixix_i重复了两次,于是A的集合为:请你给出一个算法,找出A中重复的元素和缺失的元素。要求算法的空间复杂度是O(1),时间复杂度是O(n)。这道题有两种解...原创 2018-08-24 17:27:01 · 362 阅读 · 0 评论 -
一道能做出来就脚踢BAT的高难度算法题:在元素重复三次的数组中查找重复一次的元素
我们看一道难度很高的查找类算法题,如果你真能在一小时内给出正确的算法和编码,那么你随便在BAT开口年薪一百万都不算过分。我们先看题目:给定一个数组,它里面除了一个元素外,其他元素都重复了三次,要求在空间复杂度为O(1),时间复杂度为O(n)的约束下,查找到只重复了一次的元素。在一个小时内设计出满足条件的算法并编写正确的代码,难度相当大。我们先从简单的角度思考,一种做法是先将数组进行排序,然后从头...原创 2018-10-16 16:00:15 · 590 阅读 · 0 评论 -
面试算法:用队列计算滑动窗口内的最大网络流量
在网络流量的控制过程中,有时候需要找到从给定的某个时间点开始,往前倒退若干个时段内的最大网络流量m(t, w). 其中 t 是给定的某个时间节点,w就是滑动窗口大小,于是m表示的就是在时间段[t - w, t] 之间的最大网络流量。原创 2017-04-04 15:48:38 · 831 阅读 · 0 评论 -
面试算法:在整形数组中构建元素之和能整除数组长度的子集
假设A是一个整数数组,长度为n,数组中的元素可能是重复的。设计一个算法,找到一系列下标的集合I = {i(0), i(1), i(2)….i(n)}. 使得(A[i(0)] + A[i(1)] + … A[i(n)] ) mod n = 0.请给出求得集合I的算法原创 2017-02-16 10:51:18 · 701 阅读 · 0 评论 -
利用DSF深度优先搜索来解容器倒水问题
在一些面试算法或智力题中,时不时会遇到容器倒水的问题,例如,有三个容器,分别是10升,7升,4升,7升和4升的容器装满了水,10升容器是空的,如果将容器a中的水倒入容器b时,必须使得a中的水全部倒完,或者b被倒满,问有没有一种倒水序列,使得7升容器或4升容器中只有2升的水。这个问题怎么会跟图论的深度优先搜索联系起来呢。如果我们把三个容器的水量和容量状态当作一个点,例如初始时刻[10(e原创 2015-12-07 21:27:36 · 2511 阅读 · 1 评论 -
一个android 文本比对App的实现(一)
做c++开发很多年了,从早年windows vc6.0 做客户端程序开发,这些年后台流媒体服务器后台开发。随着时代变迁,移动互联逐渐兴起,直到现在,移动互联的风头早已盖过传统互联网应用,因而传统后台开发似乎日渐式微。如今要找工作的话,android,IOS等开发的职位不但数量远远多于c++,而且报酬也要比c++高很多,如果在移动开发上做过三年以上,年薪25W以上的机会多的是,但是对于c++ 要达到原创 2015-11-13 17:05:27 · 3571 阅读 · 0 评论 -
一个android文本比对app的实现(四)--Hirschberg文本比对算法
本章所描述的是程序的核心,文本比对算法的实现,文本比对本质上就是字符串的比对,在两个字符串中,找到他们的最长相同子串,例如:S1 = abcdefg, S2 = afhctdog; 那么两个字符串的最长相同子串就是:acdg. 在算法导论一书中,最长子串用LCS表示(longest common substring). 寻找lcs 是最为典型的动态规划算法的运用,动态规划也是各大技术公司最为原创 2016-02-09 16:59:04 · 1358 阅读 · 0 评论 -
一道亚马逊算法面试题的情景分析
阅读博客的朋友可以观看视频: http://study.163.com/course/courseMain.htm?courseId=1002942008我们聚焦于一道亚马逊的算法面试题,通过分析该题,复盘它的解题情景,我们可以初步体会到算法面试的应对步骤,并从中窥探到,成功的算法面试,其流程应该怎么走。原创 2016-07-26 10:26:07 · 4476 阅读 · 0 评论 -
字符串算法面试题之:游程编码和词组倒转
算法面试主题的视频内容请参看: 如何进入Google,算法面试之道字符串的处理在编程中,几乎无处不在,从脚本处理,前端开发,到生物信息算法,无不广泛而又深入的涉及到字符串的处理。在面试算法中,各种有关字符串处理的算法题,经常用来检测候选人的编程功底,从本节开始,我们逐步展示字符串的相关处理算法,先从简单开始,对于复杂的字符串算法,往往涉及到哈希表和动态规划,相关内容,在后面我们会逐步涉及到。原创 2016-09-01 11:50:57 · 2108 阅读 · 0 评论 -
面试算法题:链表的倒转
在算法面试中,链表出现的频率相当之高,一是因为链表是数据结构的基础,很多更复杂的高层数据结构的设计大多基于链表之上。其次,链表可以实现多种变化,因此使用链表来考察候选人,既能考察其技术基本功是否扎实,同时又能检验对方的思维灵敏性,因此,链表作为算法面试的常用手段也就不足为奇了。原创 2016-12-09 14:56:36 · 1095 阅读 · 1 评论 -
面试算法:链表成环的检测
在有关链表的面试算法题中,检测链表是否有环是常见的题目。给定一个链表,要求你判断链表是否存在循环,如果有,给出环的长度,要求算法的时间复杂度是O(N), 空间复杂度是O(1)原创 2016-12-16 15:04:54 · 10649 阅读 · 5 评论 -
算法面试之道:在O(1)的时间内删除单链接链表的指定节点
对于一个单项链接的链表,给定其中某个任意节点,要求在O(1)的时间复杂度内删除该节点。表面上看起来,似乎不可能做到,因为如果要求时间复杂度是O(1)的话,那意味着,算法实现中,不得包含有任何循环或是对链表的整体遍历。但问题在于,要删除某个指定节点,我们需要通过遍历,找到该节点的前节点,然后修改前节点的next指针,这样才能正常的删除当前节点。但如果给定的节点不是链表的末尾节点的话,那么要做到这一点就不难原创 2016-12-31 09:58:46 · 493 阅读 · 0 评论 -
算法面试:单向链表节点的奇偶排序。
给定一个单项链表,要求实现一个算法,把链表分成两部分,前一部分全是下标为偶数的节点,后一部分全是下标为奇数的节点。不能分配新的内存空间,在操作队列时,不可更改节点内容,只能更改节点的next指针。原创 2017-01-14 11:17:35 · 3332 阅读 · 1 评论 -
面试算法:双指针单向链表的自我复制
一种链表特点是,除了next指向下一个节点外,它还多了一个指针jump,这个指针指向队列中的某一个节点,这个节点可以是当前节点自己,也可以是队列中的其他节点。例如上图,节点0的jump指针指向了最后一个节点,而节点1的jump指针指向了它自己。这种链表有一个专门的名称,叫Posting List.原创 2017-01-21 10:28:33 · 1186 阅读 · 0 评论 -
面试算法:利用堆栈计算逆向波兰表达式
给定一个四则运算表达式的字符串,如果该表达式满足逆向波兰表达式,那么该字符串要满足以下条件:1: 该表达式含有一个数字字符或一串数字字符。2:它拥有给定格式,如”A, B, 。“,其中A,B是逆向波兰表达式,句号。表示的是四种运算符"+,-,*,/"其中之一。例如字符串“3,4,*,1,2,+,+”就满足逆向波兰表达式,该表达式的值为:3 * 4 + (1+2) = 15.原创 2017-02-15 11:11:32 · 1211 阅读 · 0 评论 -
面试算法:计算堆栈当前元素的最大值
堆栈的常用操作有, pop 弹出堆栈顶部的元素;push 向堆栈压入一个元素;peek 获得堆栈顶部的元素值,但不弹出堆栈。现在要去你增加一个操作max, 它的作用是返回堆栈当前所有元素中值最大的那个元素原创 2017-02-24 10:11:14 · 2326 阅读 · 0 评论 -
查找算法:在双重排序的数组中进行快速查找
假设A是一个n*n的二维数组。它的行和列都按照升序排列,给定一个数值x,设计一个有效算法,能快速在数组A中查找x是否存在。同时考虑一个算法效率的下界,也就是无论任何算法,它的时间复杂度都必须高于某个给定水准。这道题难度不大,看到排序数组时,我们就应该本能的考虑到使用二分查找。我们先看一个具体实例,假设有一个符合条件的二维数组如下:最简单的方法是,循环遍历整个二维数组,依次查找给定元素是否与给...原创 2019-04-08 11:19:38 · 888 阅读 · 1 评论