找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 14904|回复: 13
收起左侧

[刷题总结] 算法思路总结

  [复制链接]

5

主题

3

精华

63

积分

资深会员

Rank: 2

积分
63
发表于 8-29-2017 07:15 AM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一般关于算法的文章,都是从经典算法讲起,一种一种算法介绍,见得算法多了,自然就有了感悟,但如此学习花费的时间和精力却是过于巨大,也不适合在博客里面交流。这一篇文,却是专门讲快捷思路的,很多人面对算法题的时候几乎是脑子里一片空白,这一篇文章讲的就是从题目下手,把毫无思路的题目打开一个缺口的几种常见技巧。
(一)由简至繁
事实上,很多问题确实是很难在第一时间内得到正确的思路的,这时候可以尝试一种由简至繁的思路。首先把问题规模缩小到非常容易解答的地步。
[题目]有足够量的2分、5分、1分硬币,请问凑齐1元钱有多少种方法?
此题乍看上去,只会觉得完全无法入手,但是按照由简至繁的思路,我们可以先考虑极端简单的情况,假如把问题规模缩小成:有足够量的1分硬币,请问凑齐1分钱有多少种方法?毫无疑问,答案是1
得到这一答案之后,我们可以略微扩大问题的规模: 有足够量的1分硬币,凑齐2分钱有多少种方法?凑齐n分钱有多少种方法?答案仍然是1
接下来,我们可以从另一个角度来扩大问题,有足够量的1分硬币和2分硬币,凑齐n分钱有多少种方法?这时我们手里已经有了有足够量的1分硬币,凑齐任意多钱都只有1种方法,那么只用1分钱凑齐n-2分钱,有1种方法,只用1分钱凑齐n-4分钱,有1种方法,只用1分钱凑齐n-6分钱,有1种方法......
而凑齐这些n-2n-4n-6这些钱数,各自补上2分钱,会产生一种新的凑齐n分钱的方法,这些方法的总数+1,就是用1分硬币和2分硬币,凑齐n分钱的方法数了。
面试时,立刻采用这种思路是一种非常有益的尝试,解决小规模问题可以让你更加熟悉问题,并且慢慢发现问题的特性,最重要的是给你的面试官正面的信号——立即动手分析问题比皱眉冥思苦想看起来好得多。
对于此题而言,我们可以很快发现问题的规模有两个维度:用a1-ak种硬币和凑齐n分钱,所以我们可以记做P(k,n)。当我们发现递归公式P(k,n) = P(k-1,n - ak) + P(k-1,n - 2*ak) + P(k-1,n - 3*ak) ... ... 时,这个问题已经是迎刃而解了
通常由简至繁的思路,用来解决动态规划问题是非常有效的,当积累了一定量简单问题的解的时候,往往通向更高一层问题的答案已经摆在眼前了。
(二)一分为二
另一种思路,就是把问题一刀斩下,把问题分为两半,变成两个与原来问题同构的问题,能把问题一分为2,就能再一分为4,就能再一分为8,直到分成我们容易解决的问题。当尝试这种思路时,其实只需要考虑两个问题:1.一分为二以后,问题是否被简化了?2.根据一分为二的两个问题的解,能否方便地得出整个问题的解?
[题目]将一个数组排序。
这个经典算法肯定所有人都熟悉的不能再熟悉了,不过若是从头开始思考这个问题,倒也不是所有人都能想出几种经典的排序算法之一的,这里仅仅是用来做例子说明一分为二的思路的应用。
最简单的一分为二,就是将数组分成两半,分别排序。对于两个有序数组,我们有办法将它合并成一个有序数组,所以这个一分为二的思路是可行的,同样对于已经分成两半的数组,我们还可以将这个数组分作两半,直到我们分好的数组仅有1个元素,1个元素的数组天然就是有序的。不难看出,按这种思路我们得出的是经典数组排序算法中的归并排序
还有另一种一分为二的思路,考虑到自然将数组分成两半合并起来比较复杂,我们可以考虑将数组按照大于和小于某个元素分成两半,这样只要分别解决就可以直接连接成一个有序数组了,同样这个问题也是能够再次一分为二。按照这个思路,则可以得出经典数组排序算法中的快速排序
(三)化虚为实
这种思路针对的是浮点数有关的特殊问题,因为无论是穷举还是二分,对于浮点数相关的计算问题(尤其是计算几何)都难以启效,所以化虚为实,指的是把有点""的浮点数,用整数来替代。具体做法是,把题目中给出的一些浮点数(不限于浮点数,我们不关心其具体大小的整数也可以)排序,然后用浮点数的序号代替本身来思考问题,等到具体计算时再替换回来。
[题目]已知n个边水平竖直的矩形(用四元组[x1,y1,x2,y2]表示),求它们的总共覆盖面积。
因为坐标可能出现浮点数,所以此题看起来十分繁复(可以实践上面由简至繁和一分为二的思路都基本无效),略一思考,矩形的覆盖关系其实只跟矩形坐标的大小有关,所以我们尝试思考将矩形的所有x值排序,然后用序号代替具体竖直,y值亦然,于是我们得到所有矩形其实处于一个2nx2n的区块当中,这样我们用最简单的穷举办法,可以计算出每一个1x1的格子是否被覆盖住了。至此,只要我们计算面积的时候,把格子的真实长宽换算回来,就已经得到题目的答案了。
本文是某天在QQ群里讨论面试时的算法问题时想到要写的,以上三种思路,是我平时遇到算法问题的快速思考方向,并非万灵药方,若是不能生效,就要静下心来慢慢思考观察了,考虑到面试的时候基本不会遇到高难度算法题,这几种技巧的命中率应该不会太低,共享给大家,希望有所帮助。
扎实的基础知识
扎实的基本功是成为优秀程序员的前提条件,因此面试官首要关注应聘者的素质即是否具备扎实的基础。通常基本功在编程面试环节体现在两个方面:一是编程语言,二是数据结构和算法。
每个程序员至少要熟练掌握1~2门编程语言。面试官从应聘者在面试过程中写的代码以及跟进的提问中,能看出他编程语言掌握的熟练程度。以大部分公司面试要求的C++为例,如果函数需要传入一个指针,面试官可能会问是否需要为该指针加上const,把const加在指针不同的位置有什么区别;如果写的函数需要传入的参数是一个复杂类型的实例,面试官可能会问传入值参数或者引用参数有什么区别,什么时候需要为传入的引用参数加上const(想让用户无法改变引用对象的状态,只要加上const限制)
数据结构通常是编程面试过程中考查的重点。在参加面试之前,应聘者需要熟练掌握链表、树、栈、队列以及哈希表等数据结构以及它们的操作。如果我们留心各大公司的面试题,就会发现链表和二叉树相关的问题是很多面试官喜欢问的问题。这方面的问题看似简单,但真正掌握也很不容易,特别适合在短短几十分钟的面试时间内检验应聘者的基本功。如果应聘者事先对链表的插入和删除结点了如指掌,对二叉树的各种遍历方法的循环和递归写法都烂熟于胸,那么真正到了面试时也就游刃有余了。
大部分公司对算法的要求都只是考查查找和排序。应聘者可以在了解各种查找和排序算法的基础上,重点掌握二分查找、归并排序和快速排序,因为很多面试题都只是这些算法的变体而已。比如把排序好的数组的前面若干个数字移到数组的后面,然后问怎样在这个数组之中找到最小的数字。这道题其本质就是考查二分查找。少数对算法很重视的公司比如谷歌或者百度,还会要求应聘者熟练掌握动态规划和贪婪算法。如果对这种类型的公司感兴趣,那么应聘者在参加面试之前就应该加强对相关算法题目的练习。
高质量的代码
只有注重质量的程序员,才能写出鲁棒稳定的大型软件。在面试过程中,面试官总会格外关注边界条件、特殊输入等看似细枝末节但实质至关重要的地方,以此来分析应聘者是否注重代码质量。很多时候,面试官发现应聘者写出来的代码只能完成最基本的功能,一旦输入特殊的边界条件参数就会错误百出甚至程序崩溃。
举个很多应聘者都被问过的一个问题:写一个函数,把字符串转化成整数。这道题看似很简单,绝大部分计算机专业的毕业生都能用十行以内的代码实现最基本的功能。可是在实际面试过程中,十个应聘者中只有一个人能通过这道题的面试,因为绝大部分应聘者不能全面考虑到各种特殊输入,比如输入的字符串含中有非数字的符号、在字符串的开头有正负号、字符串中有正负号但其位置不是在字符串的开头。
除此之外,面试官还希望应聘者能考虑的边界条件包括21474836470×7FFFFFFFint能表示的最大正整数)和-21474836480×80000000int能表示的最小负整数)。
除了边界条件和特殊输入考虑不足之外,面试官还有一个不能容忍的错误就是程序崩溃。面试时很多应聘者都会忘记对空指针做特殊处理而导致程序崩溃。如果面试时遇到链表、二叉树相关的题目,应聘者一定要特别小心。因为这两种题目对应的代码里通常会有大量的指针操作,如果考虑不周到,就有可能对空指针进行操作而使程序崩溃。
比如这样一道题:输入一个链表的头指针和一个无符号整数k,输出该链表的倒数第k个结点。这个题目很多人都能想到用两个指针来解决:第一个指针先在链表上移动k-1步,同时让第一个指针和第二个指针在链表上移动。当第一个指针移动到尾指针时,第二个指针指向的就是倒数第k个结点。然而不是每个应聘者都能根据正确思路写出完整的代码。不少应聘者会忽略两种可能:一是输入的链表头指针有可能是空指针;二是链表上结点的数目有可能少于k个。忽略这两点的代码都存在崩溃的可能,从而很难获得面试官的青睐。
要想写出鲁棒的高质量代码,需要在动手写代码之前想好测试用例。在写代码之前,先要想好各种边界条件和特殊输入作为测试用例。当代码写好之后,自己在心里用之前想好的测试用例来检验自己写出的代码,这样就能在面试官之前发现并解决问题。以求链表的倒数第k个结点为例,如果事先想到了输入头指针为空指针和链表上的结点总数少于k这两个测试用例,并且在写好代码之后在心里模拟代码的运行过程,确保能够通过这两个测试用例的测试,那么这轮面试必然是能够通过的。
清晰的思路
只有思路清晰,应聘者才有可能在面试过程中解决复杂的问题。有时面试官会有意出一些比较复杂的问题,以考查能否在短时间内形成清晰的思路并解决问题。对于确实很复杂的问题,面试官甚至不期待应聘者能在面试不到一个小时的时间里给出完整的答案,他更看重的可能还是应聘者是否有清晰的思路。面试官通常不会喜欢应聘者在没有形成清晰思路之前就草率地开始写代码,结果写出来的代码容易逻辑混乱、错误百出。
应聘者可以用几个简单的方法帮助自己形成清晰的思路。
首先是举几个简单的具体例子让自己理解问题。当一眼看不出问题中隐藏的规律时,可以试着用1~2个具体的例子模拟操作的过程,这样说不定就能通过具体的例子找到抽象的规律。
其次可以试着用图形表示抽象的数据结构。像分析与链表、二叉树相关的题目时,可以画出它们的结构图来简化题目。
最后可以试着把复杂的问题分解成若干个简单的子问题,再一一解决。很多基于递归的思路,包括分治法和动态规划法,都是把复杂的问题分解成一个或者多个简单的子问题。
比如把二叉搜索树转化排序的双向链表这个问题就很复杂。碰到这个问题,不妨先画出1~2个具体的二叉搜索树及其对应的排序双向链表,直观地感受二叉搜索树和排序的双向链表有哪些联系。如果一下子找不出转换的规律,可以把整个二叉树看出三部分:根结点、左子树和右子树。当递归地把转换左右子树这两个子问题解决之后,再把转换左右子树得到的链表和根结点链接起来,整个问题也就解决了。
优化代码的能力
优秀的程序员对时间和空间的消耗锱铢必较,他们很有激情不断优化自己的代码。当面试官出的题目有多种解法时,通常他会期待应聘者最终能够找到最优解。这就要求应聘者在面试官提示还有更好的解法时,不能放弃思考,而应该努力寻找在时间消耗或者空间消耗上可以优化的地方。
要想优化时间或者空间效率,首先要知道如何分析效率。即使是同一个算法,用不同方法实现的效率可能也会大不相同,要能够分析出算法及其代码实现的效率。例如求斐波那契数列,很多人喜欢用递归公式f(n)=f(n-1)+f(n-2)求解。如果分析它的递归调用树,就会发现有大量的计算是重复的,时间效率是以n的指数增加。但如果先求f(1)f(2),再根据f(1)f(2)求出f(3),接下来根据f(2)f(3)求出f(4),并以此类推用一个循环求出f(n),这种计算方法的时间效率就只有O(n),比前面递归的方法要好很多。
要想优化代码的效率,还要熟知各种数据结构的优缺点,并能选择合适的数据结构解决问题。我们在数组中根据下标可以用O(1)完成查找。数组的这个特征可以用来实现简单的哈希表解决很多面试题,比如在字符串中找到第一个只出现一次的字符。再比如为了找出n个数字中最小的k个数,需要一个数据容器来存储k个数字。在这个数据容器中,我们希望能够快速地找到最大值并且能快速地替换其中的数字。经过权衡,我们发现二叉树比如最大堆或者红黑树都是实现这个数据容器的理想选择。
要想优化代码的效率,也要熟练掌握常用的算法。面试中最常用的算法是查找和排序。如果从头到尾顺序扫描一个数组,需要O(n)时间才能完成查找操作。但如果数组是排序的,应用二分查找算法就能把时间复杂度降低到O(logn)。排序算法除了能够给数组排序之外,还能用来解决其他问题。比如快速排序算法中的Partition函数能够用来在n个数里查找第k大的数字,从而可以用O(n)的时间在数组中找到出现次数超过数组长度一半的数字。如果面试题是一个求最大值或者最小值的题目,则可以尝试用动态规划法或者贪婪算法,比如用动态规划法求出数组中连续子数组的最大和。
优秀的综合能力
在面试过程中,应聘者除了展示自己的编程能力和技术功底之外,还需要展示自己的软技能,诸如沟通能力和学习能力。随着软件系统的规模越来越大,软件开发已经告别了单打独斗的年代,程序员与他人的沟通变得越来越重要。在面试过程中,面试官会观察应聘者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰,并以此判断他沟通能力的强弱。另外,面试官也会从应聘者说话的神态和语气来判断他是否有团队合作的意识。通常面试官不会喜欢高傲或者轻视合作者的人。
IT行业知识更新很快,因此程序员只有具备很好的学习能力才能跟上知识更替的步伐。通常面试官有两种办法考查应聘者的学习能力。第一种方法是询问应聘者最近在看什么书、从中学到了哪些新技术。面试官可以用这个问题了解应聘者的学习愿望和学习能力。第二种方法是抛出一个新概念,接下来他会观察应聘者能不能在较短时间内理解这个新概念并解决相关的问题。比如面试官要求应聘者计算第1500个丑数。很多人都没有听说过丑数这个概念。这时面试官就会观察应聘者面对丑数这个新概念,能不能经过提问、思考、再提问的过程,最终找出丑数的规律从而找到解决方案。
知识迁移能力是一种特殊的学习能力。如果我们能够把已经掌握的知识迁移到其他领域,那么学习新技术或者解决新问题就会变得容易。面试官经常会先问一个简单的问题,再问一个很复杂但和前面的简单问题相关的问题。这时面试官期待应聘者能够从简单问题中得到启示,从而找到解决复杂问题的窍门。比如面试官先要求应聘者写一个函数求斐波那契数列,再问一个青蛙跳台阶的问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,请问这只青蛙跳上n级的台阶总共有多少种跳法?应聘者如果具有较强的知识迁移能力,就能分析出青蛙跳台阶问题实质上只是斐波那契数列的一个应用。
还有不少面试官喜欢考查应聘者的抽象建模能力和发散思维能力。面试官从日常生活中提炼出问题,比如如何判断5张扑克牌是不是顺子,考查应聘者能不能把问题抽象出来用合理的数据结构表示,并找到其中的规律解决这个问题。面试官也可以限制应聘者不得使用常规方法,这要求应聘者具备创新精神,能够打开思路从多角度去分析、解决问题。比如面试官要求应聘者不用加减乘除四则运算实现两个整数的加法。此时面试官期待应聘者能够打开思路,用位运算实现整数的加法。
看来我真的人老珠黄了,这些日子重新拿起算法书,发现思维能力又再次下了一个台阶,成功回到地下一层。翻看一些题目,觉得毫无思路,再一看附近的笔记,我靠,原来这些东西我原来都曾搞定过的。。。 赶在十一长假结束,整理了一些零星的算法笔记,顺手都分享了,希望对面试有些帮助。不要相信有一夜壮阳的九阳神功,算法这玩意靠得是一点一滴的积累和思维的磨练。一些所谓的方法和技巧,都只是给面试来只强心针喂一口大补丸,主要目的是给自己壮个胆,让自己看着自信一点。。。

【一】 时间受限
大部分的面试题,都是对时间复杂度有所要求的,如果有涉及,最快一类的字样,毫无疑问,先上时空原理,用空间来换时间。Hash,大数组,一些辅助性的空间,都是首选。在我的面试经历中,有无数次用到过Hash和大数组的。不过,通常这不会是面试官想听的唯一解法,他们紧接着十有八九是会说如果只有xxxx空间呢?。说此类方法只是为自己争取更多的时间,并且体现思考的完整性,简而言之,装B用。。。eg1.1:求一个char8bit)中,二进制1的个数,越快越好。-- 《编程之美》eg1.2:有一个整数数组A[N],让你不用除法,求另一个数组B[N],其中B【i】= A[0]*A[1] ... * A[N-1] / A【i】,期望复杂度是O(N)

【二】 空间受限
这里的空间受限,指的是在大数据分析的逻辑下,空间受限的问题。大部分情况下,就是压缩。位图是一个很好的方法,用一个bit(或几个)取代更大的int类型,最常见的位图是1bit取代1int,其实,很多时候,1bit可以取代更大的空间,这完全取决于你需要保留的信息。。。eg2.1:有一个很大的文件,存放一堆7位的电话号码,号码无重复,请用最小的内存消耗,将其排序。-- 《编程珠玑》eg2.2:给10MB的内存,给一个4百万整数的文件,找一个不在文件中的整数。-- (传说中的Google面试题)

【三】 基于文件
越来越多的大公司,开始关系对文件的处理,上面所说的空间受限的问题,其实也基本都是和文件打交道。基于文件的处理,基本都是寻找,或者排序,最最核心的,就是减少文件读取的次数。除了位图法,还可以考虑哨兵,典型的案例就是外排中,增加单个文件大小的方法。eg3.1:给定一个包含430000000032位整数的顺序文件,找到一个至少出现两次的整数。-- (传说中的微软面试题,我曾经遇到过类似的)eg3.2:有一个文件,有很多很多的整数(也许有100亿),寻找其中最大的K个。 -- 《编程之美》

【四】 常见方法
你需要相信,面试官也是人,他不会有心情花30分钟给你描述一个问题,或者让你做50页纸的推导,考算法的目的只是为了你的思维能力,而不是真的想让你搞定一个复杂的问题。大部分问题,都是有比较快速清晰的解决方法的。。。
1. 分治法 这绝对是你必须考虑使用的一种方法,如果有可能的话。动态规划这东西,在面试的时候比较沉重,不好描述,不好书写,而分治却刚刚好,美丽,快捷,易书写,是面试官杀人越货的首选武器。分治的用法实在是太多了,几乎是无所不在,二分,快排,种群计数,各个唯美无比。。。eg4.1:给你一个长度为N的整数数组,请找出最大的子数组和。-- 《编程之美》eg4.2:求一个int32bit)中,二进制1的个数。 -- 《代码之美》(注,不是编程之美是另一本书,有一章叫做种群计数,这是一种很酷的分治)
2. 排序和查找 排序出现的次数实在是太多了,很重要的一点,排序的东西才能用二分。二分是如此好用,以至于我们总是想着排序。查找和排序总是紧密联系的,当然,仅仅是为了查找,做一次排序,你需要衡量一下代价。。。eg4.3:有一个论坛,有ID发帖数目超过总数的一半,给你论坛所有帖子的ID列表,请你找到这个水王。-- 《编程之美》eg4.4:给一组一维的空间[1, 6] [2, 4] ... ,请求是否有区间重叠。-- 《编程之美》
3. 减小问题规模 很多时候,题目看上去很吓人,仔细分析一下,就可以刨去其中大部分的无关内容,获得真正的出题意图,这一点很重要。另外有些时候,题目会在空间上做出一些限制,这个时候,你可以考虑动态的对数据规模进行缩减,比如用减法或除法抵消,用抑或抵消,等等。。。eg4.5:给一个整数N,求它的阶乘N!,有几个0结尾。 -- 《编程之美》eg4.6:盒子里有三种颜色的球,红黄蓝,可以用任意两个不同颜色的球,换两个另外颜色的球,比如1 + 1 = 2蓝。现在盒子里面有171个红球,172个黄球,173个蓝球,问,能不能经过若干次交换,最终变成同一颜色的球。-- TopLanguage eg4.7:同eg4.3eg4.8:有一组数,除了一个数只有1个,其他都是两两成对的,请找出那一个不成对的数。另,如果不成对的数有两个,该如何是好。
4. 常量法 典型的速餐方法,它的思想是,一组数,在某些情况下,和一定,通过这个常量,进行反推,可快速搞定一些问题。。。eg4.9:有一副扑克牌(你可以用任意方式来表示),被抽去一张,请快速找出这抽去的一张是什么?-- 微软面试题,活生生
5. 编码 编码真是个好东西,它可以将复杂的问题抽象化。比如,对一个序列进行编码,可以直接映射到数组脚标上,大大提高访问速度。。。eg4.10:最近一次百度笔试题eg4.11:有1000瓶超级名贵的葡萄酒,其中有1瓶有毒。这种毒药很厉害,哪怕被稀释了1000000倍还是可以毒死人的。但这个毒药一定时间后才会毒发,时长是1个月。为了不浪费这些葡萄酒,有1000个壮士决定花5周的时间将毒酒找出,他们只希望最多有10个人牺牲,你需要如何安排才能实现。-- TopLanguage
6. 概率 不要轻视概率题,哪怕是最基本的概率常识。概率题之所以被青睐,因为它们往往违背直觉,容易让人陷入迷茫,这种场面是面试官喜闻乐见的。我曾经在baidu面试中,被一道简单的概率题,调戏的脸面全无,至今想起,仍然是汗流满面。所以,为了人身安全,复习一下概率的基本知识吧。。。eg4.12:有一个长度为N的链表,N未知。希望你只遍历一次链表,就从链表中等概率的挑出K个数。 --TopLanguage

【五】 加速方法
很多时候,你给的算法基本正确,但是还不够优秀。面试官会希望你优化一下。优化的方法有很多,就基本的思路就是,考虑一下到底哪里出现了浪费。常见的浪费有两种,一种是用了比较沉重的运算,比如除法、取模等,你可能需要为计算来加速。另外有时候,你的算法还太粗线条,比如只需要符号,你却计算了总数等等。。。eg5.1:求两个数的最大公约数。-- 《编程之美》eg5.2:有一个整数数组A[N],求其中连续N-1个数的最大乘积。-- 《编程之美》eg5.3:估计一下快速排序的比较次数。-- 《代码之美》

【六】 数据结构
大部分面试时候,我们都是面向数组来设计算法,因为简单变化多,面试官好把握。但其他数据结果,同样也很重要。AVLB树那样的可能比较复杂,但是链表、树这样的结构,也经常出没,我个人就碰见多次。。。
1. 链表eg6.1:给你一个单链表的头指针,在不使用大量附加数据或修改原有数据的前提下,检查一个单链表是否有环。-- 微软面试题,活生生eg6.2:给你两个链表,如何判断其是否相交,如果相交,如何找到两个链表的第一个交点。-- 《编程之美》eg6.3:只给你一个指向链表中某元素的指针,请删除该元素。-- 《编程之美》
2. eg6.4:写堆排序的算法eg6.5:判断一棵二叉树T中,是否包含另一颗二叉树P的结构。 -- 微软面试题,活生生

以上一些内容,只是管中窥豹而已,一不小心,还被我写成了题集。原先只是给我自己做个索引的,所以没有加任何求解的内容,如果有兴趣,可以查看相关出处。题目来源主要是一些快餐式的书和论坛,包括《编程之美》《代码之美》《编程珠玑》,其中特别推荐,TopLanguageGroup今天我们思考专辑。快餐吃多了总会不营养的,需要慢条斯理的按食谱吃点营养大餐才能真正的强身健体,比如高大爷的圣经,《算法导论》,还有,波利亚的《怎样解题》。

归根结底,面试的算法其实不只是算法而已,面试官看重的是从做题过程中体现出的思考问题的能力,而不是最终的结果本身。你和面试官之间是一场配合和博弈,你需要勾引面试官给你反馈,并抓住它们辅助思考,从而让他们满意。算法在面试中的地位,好比是托福在出国中的地位一样,必须但不是最重要的,它只是考量的各个方面的一部分,不一定就决定生死。所以,有就让它更好点,没有就稍微补充点,足矣。我做过的面试其实不多,有的还不错,有的就像坨屎,只希望,从今往后,努力让我的面试远离粪坑。。。

评分

参与人数 1金钱 +3 收起 理由
Sophia + 3 很给力!祝您面试工作学习顺利~

查看全部评分

0

主题

0

精华

0

积分

新米人

Rank: 1

积分
0
发表于 8-29-2017 07:15 AM 来自美国米群网手机版 | 显示全部楼层
感谢oldman分享~~~
回复 支持 反对

使用道具 举报

发表于 8-29-2017 10:02 PM | 显示全部楼层
很给力!祝您面试工作学习顺利~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表