实例介绍
找工作刷题可用,leetcode题目详解,leetcode题目详解
纸上得来终觉浅,绝知此事要躬行 写在前面 本文总结∫LeetCodeonlinejudge(htp://leetcode.com/onlinejudge)2013年为止 的所有题目的答案,所有代码经过测试通过,为了方便自己日后的算法的总结特此记录,部 分思路和解法来溟于网上,特别感谢题友戴方勤,连城(http://weiυo.com/lianchengju 曹鹏(http://weibo.com/cpcs)王顺达(http://weibo.com/u/1231981115)提供的思路。全 文经过2012年,2013年,2015年三次修改整合,将之前的部分代码替换为C+←11,一方 面是为了简洁,另一方面主要是为了熟悉一下刚刚出来的C++11特性 本文中的代码规范,跟在公司中的工程规范略有不冋,为了使代码短(方便迅速实现) (1)所有代码都是单·文件。这是因为·般0J网站,提交代码的吋侯只有个文本框,如 果还是按照标准做法,比如分为头文件.h和源代码.cpp,无法在內站上提交; (2) Shorter is better。能递归则一定不用栈;能用STL则一定不自己实现。 (3)不提侣防御式编程。不需要检查 malloc O/new返回的指针是否为 nullptr;不需要检 查内部数入口参数的有效性。 ●如何使用 由于时间有限,本文没有对每个题目过为深入的分析和效率的挖掘。一方面本文只是想 提供一个大家刷题的参考,另一方面也为了阅读的辁松。如果对」每个题目都进行深入的分 析,可能就公成为类似博主July的博文(微软面试100题作者)内容略显冗余,并且很多分 析如果不具备一定算法功底是很难理解的。但是本文尽可能的总结了每个题目的多种思路实 现 如果你还有一两个月即将找工作,那么建议阅读时短暂思考后如果没有头绪则直接看答 案,并且只需从每个题目的解法中选取个自己最容易理解的(注意不是代码最短的,也不 是效率最高的)方法记下了,其他方法不需要过多研究。因为确保自己不忘记才是最关键的, 髙效的算法虽然深受面试官喜爱,但是短时间做大量题目很雉保证到了面试时候你还能想起 来这些题的解法。 如果你还离找工作有段时间,如研一或研二(学硕),那么建议仅把本文作为一个参考 自己动手刷题,每个题目要自己独立思考(不要动不动就去网上搜博客答案,这样很难提晑 算法能力),即使自己的效率不高也要动手实现。一时想不起来的时候可以先看别的题日, 这个题目可以在每天去实验室路上或者各种空闲抽空思考一下,很多时候机会柳暗花明。如 果儿天都没想到,再去看木文提供的思路,然后认真去思考:1.自凵为什么没有想到这种方 法;2.采用这种方法的题目有什么隐含特点;3.之前有没有类似的解法题目,如果有进行对 比整理,找到这些题目的共性,总结解法的代码框架。 如何学习算法 算法学习和应付面试中的算法是完全不同的,一个良好的算法功底可以基木确保应付 IT个业的大部分算法考题,但是相反那些可以通过公司面试算法人的算法能力可能是很差 的。如何应付面试算法这里不在多说,网上烂大街的面经都有讲,其实就是题海战术,或者 说是“背题”。这种方式对于面试准备所需时间较短,但对自身提高不大,如果是你花两三 个月做这些工作,那么找工作结束后基本上也就忘了一千二净了,对自己分析问题解决问题 的能力没有什么提高。 算法学习主要把握一个准则,就是实践和理论相结合。这个方面很多人过于重视刷题 这是一个很大的误区,刷题是算法提高不可缺少的,但不是仅仅刷题就可以提髙的。算法学 中关键是理论基础完善,忐维方式的培养,代码编写的熟练。而前两方面都是仅仅通过刷 纸上得来终觉浅,绝知此事要躬行 题不能提高的 算法学习的理论基础主要包括三个方面:数学基础、数据结构、经典算法。数学基础包 括:离散数学、组合数学、只体数学等(可以找对应的书籍学习);数据结构方面本科大多 基本掌握;经典算法可以参考下面的一些书籍。 算法圣经:《算法导论》 经典算法:《编桯珠玑》、《编程珠玑续》、《 Cracking the coding int 《计算机程序设计艺术》等。(其实经典算法也靠积累,如KMP、A*、SⅠFT勿view》 数学方面:《组合数学》、《具体数学》、《离散数学》等 刷题参考书:《编程之美》、《剑指ofer》等,这些书只能练练于,对自身的内功提 高没什么作用。 刷题网站: 1.leetCodehttp://leetcode.com 这个网站里有很多经典面试题的讲解,当然最主要的是它的0J系统,里面有100多道 题目,和 ACM OJ不同的是,这里面的题目都是来自于面试题,所有更有针对性,建议至少 刷3遍,匕年吋间我刷了差不多7、8遍,多刷几遍不丢人。 2.Po.jhttp://poj.org 这是北大的0J, leetcode满足不了你,就可以来这刷了,如果还满足不了就找国外的 0J吧, USACO、URAL等。 3.Nocowhttp://www.nocow.cn/ 这里也有不少acm相关的资料,推荐看一下 USACO和URAL的题解。 4.Careercuphttp://www.careercup.com 国外著名的帮助找工作的网站,里面有很多Goog1e,Ms,FB, Amazon等等名企的面试 题,有精力就道道做吧。 如果实在感觉自己算法基础太差,可以从“九度”的0J开始,这个上面人都是入门的。 此外注意了解现有平台及工具中所用的经典算法,如压缩软件中的LZ7算法,业马逊 的υ namo中使用的一致性算法,两阶段协议, paso协议, nginx中的复杂均衡策略等等。 提示:以上总结仅代表个人七年时间算法学习方面的看法和建议,算法主要是“内功” 的修养,这是一个漫长的过程,不能一味的追求速度,有些题要反复刷,有些书要反复看, 注意去总结和思考。如果木科阶段没有这方面的学习,那么上面所列的东西在一两年内是很 难掌握的,所以要根据自己的时间选择性的学习 ●关于找工作 相信每个人都希望通过两到三年的研究生学习找到一个好工作但前提必须要知道是什 么才叫“好”工作。每个人的情况不同,理想不同,同一个工作对于不同的人来说价值也不 样。所以最关键的是知道自己想要的是什么,只有这样才能有一个适合自己的选择,找工 作,找的不仅仅是工作,更重要的是今后的生活方式。选择比努力更重要。 可供选择的主要如下: TT技术类:开发、测试、运维、数据分析、算法等 体制内:T公司体制外:银行软开等 IT非技术类:产品经理(PM)等 非技术类:销售经理、客户经理、管理培训生等 其他:国有企业,公务员,证券公司等 4 纸上得来终觉浅,绝知此事要躬行 没有人会比自己更了解自己,所以选择什么样的工作,什么样的工作适合自己只有自己 最清楚,别人的建议只能作为参考。不要盲目听取其他人的说法,例如测试岗位相对开发没 前途,学不到仆么东西类似的说法,毫无依据。也不要觉得选择银行事业单位就意味着平庸, 那么多it程序员过得好的也没几个,选择适合自己的才是最重要的,有得必有失,安稳的 工资相对少点,工资高的是拿命换钱,要知道自己想要的是什么。 ●关于找工作的心态 实习和内推是找工作的两大捷径,如果我们有这方面的机会最好不过,但是如果没有, 也不要太过于纠结,把你抱怨的时间用来踏实的学点东两,拿到一个差不多的 offer没什么 问题。当你九月份开始找工作时候,定周围有很多人通过实习和内退拿到了 offer,不要 受他们影响,更不要听他们去吹嘘,他们的实力未必比你强,仅仅是比你运气好有机会。通 过自己努力得到的更有成就感 找工作如同打仗,成王败寇,面过了仼你如何说的轻松,挂了怎么说都是悲剧。所以不 要被这些言论所景响,你只需要在整个过稈中查漏补缺,别人什么样和你无关。 不要太在意网上的面经,每个人情况不同,他的做法木必适合你,他退到的面试官和你 的也不同。 关于研究生阶段的学习 不知道是绎历的人少还是考虑的太肤浅,我知道有很多人从研究生入学开始就将工作面 试作为一个目标,一如曾经本科入学就准备考研。如果说应试教育摧残了你的中学,摧残了 你的本科,那就尽量不要让它在毁了你最后的学生生涯。毕竟找工作和高考不同,不是单纯 的考试,你可以让自己的研究生生活更有意义。 由于种种原因导致现在it公司的招聘面试,逐渐也成了应试考试,看过面经的都知道 无非就是“列书单”,所以很多人从入学开始就开始按照这个书单列表卖书看书,一直到找 工作。当然如果你按这个这么做了,找个满意的工作是不成问题的。但是你真正学到了多少? 当你花了两个月时间把《c++ prier》看完后,回忆一卜能记得多少;然后马不停蹄的开始 《 effective o+-》《 more effective o++》《深度探索C+对象馍型》《STL源码剖析》等 等,看完之后真正埋解的又有多少?不要觉得拿到好的 offer人的水平都有多牛,年年进 BAT都有很多水的不能再水的人,我说的水一部分是因为自身运气,刚好面试官问的很简单 或者问到自己刚刚会的一部分,一分部是由于只会纸上谈兵,他能把多线程的实现说的头头 是道,但实际上练个多线程程序都不会写 我知道有很多人报有这样的想法,觉得先通过面试再说,拿到了门票以后工作在恶补。 如果你还有两个月要找L作,这样的想法完全正确,但是如果你刚刚入学,并且你不是个 甘于平的人,那么还是踏实的学点东西吧。不要想着到工作以后再去恶补,正如很多人现 在所学的本应是你本科所应该学习的,你不停的在补,永远只能仰望着那些所谓的牛人。学 生生涯是学习的黄金时段,你有大把的时间去探索,工作后你的自由学习时间屈指可数。不 要幻想自己到时苦逼一点去追赶别人,那些比你牛的人更在努力,你拿什么追赶。你可以说 别人每晚1点钟睡觉,你苦逼到2点钟,既然这样为什么不利用当下的时间好好学点东西。 总之,我希望各位日标能够远大一点,如果是想搞技术,那你的日标绝不是进入某个公司 BAT每家公司的员工都有几万,你成为其中一名没有任何可值得骄傲和炫耀的。不要把目标 定的这么短小,相反你的目标是要比大多数人强。如果你有梦想,就一定要捍卫它。 那么如何才能学点有价值的东西?首先,书肯定是要看的,但是要讲究方法,不要抱着 本书从第一页开始看到最后一页,而是找你需要的内容,要记住你看书是为了学东西的而 不是为完成每天看多少的任务。不要被书的作者牵着鼻子走,多问问自己为什么,你可 纸上得来终觉浅,绝知此事要躬行 以把自己想象成一个面试官,自己给自己想问题。另外,经典的书未必是好书,每个人的基 础不一样,有些经典的书未必你当时能消化的了,一如《深入理解计算机系统》,一旦你看 了几天感觉没仆么收获或者看不太懂,那就不要在浪费时间∫,你应该去看一些适合你的, 也许半年后再看就会柳暗花明、其次,经典的书有很多,但是时间是有限的,一般两年时间 能都精度的最多不过十几本,所以读书不要贪多,·本书读3遍完全好于∏气读三本书 最后也是最重要的,注意实践。这里的实践可以是书上的课后题,可以是你自己想的小项日, 也可以是自己为了探索某个问题写的实验代码。在做项目的时候多多思考背后的原理,多多 探索底层的实现,所有的这些书上是不会告诉你的。总之,只有实战过,有些东西你才能真 正的掌握,之后让你经过一番痛苦的思考然后豁然开朗你才能长久的记忆。纸上得来终觉浅 在学习中注意总结和对比,不同语言的对比,操作系统的对比,不同特性的对比,·如 java的反射冋dl1的动态加载,一如空洞文件和程序的bss段。总结一样重要,一如动态 规划如何忺速找到最优子结构,什么情况从前向后找,什么时候采用逆推,什么时候两边夹 逼,所有这些任何一木书都不会去讲,这需要自凵总结出一套方法。总之要把自凵脑海中的 知识点随着积累逐渐连成线,形成面。 关于研究生生活 在学习中不要吝啬分享,帮助别人的同时也可以提高自己,赠人玫瑰,于有余香。 不要把自凵弄得太苫逼,学好玩嗨才是生活,所以要注重自凵的学丬效率而不是只在那 耗时间,劳逸结合才能事半功倍。有的人常常要把自搞得累成狗,菩的一逼,想着现在的 苦逼换米将来的享受也不错。我觉得我们这个年纪的人就不要再有这种幼稚的想法了,如果 你还觉得高中老师欺骗你说苦逼这三年大学就能随便玩欺骗的还不够。生活本来就是一个无 止境的奋斗史,你的前进没有终点,更没有什么阶段让你可以停滞不前的。所以保持一个长 久的奋斗心态,奋斗在当下,享受也在当下,虽然你走的很慢,至少从未停止过。 个人二十多岁出头的时候,除了仅剩不多的青春以外什么都没有,但你手头为数不多 的青春却能决定你变成一个什么样的人 最后祝各位师弟师妹工作面试顺利!! 吕恰龙 纸上得来终觉浅,绝知此事要躬行 目录 Leet Code题目详解 吕怡龙(Yilong3160163.com) 第1章 编程技巧…… 12 第2章线性表 2.1数组.….…………………………12 2. 1. 1 Remove Duplicates from Sorted Array 12 2.1.2 Remove Duplicates from Sorted Array Ii 14 2.1.3 Search in Rotated Sorted array 2.1. 4 Search in rotated Sorted Array it 16 2.1.5 Median of two sorted arrays 2. 1. 6 Longest Consecutive Sequence 18 2.1.7 Two Sum 20 2.1.83St 21 2.1.9 3Sum Closest 22 2.1.104Sum.… 2.1.11R Element 26 2.1.12 Next permutation 127 2.1.13 Permutation se 29 2.1.14 Valid Sudoku 2.1.15 Trapping Rain Water.... 32 2.1.16 Rotate lmage 34 2.1. 17 Plus One 36 2.1.18 Climbing Stairs 2.1.20 Set matrix Zeroes 2.1.21 Gas station 42 2. 1. 22 Candy 43 2.1.23 Single number… 44 2.1.24 Single Number ll…… 45 2.2单链表 着·非,看Dd着着 46 2.2.1 Add two Numbers .46 2.2.2 Reverse linked list Ii 2.2.3 Partition list. 48 2.2.4 Remove Duplicates from Sorted List 49 2. 2. 5 Remove Duplicates from Sorted list II................50 2.2.6Rot 2.2.7 Remove nth Node from end of list 52 2.2.8 Swap Nodes in Pairs 53 2.2.9 Reverse Nodes in k- Group…… …54 2.2. 10 Copy List with Random Pointer 56 2. 2. 11 Linked List Cycle.. 257 2.2.12 Linked List Cycle II 58 7 纸上得来终觉浅,绝知此事要躬行 2.2.13 Reorder list,……… 2.2.14 LRU Cache .60 第3章字符串… 看着D非着着着 .....:::::::::::::·:.::::::..::::.:::::::a.:::::: 61 3.1 Valid palindrome 3. 2 Implement strStr( 3. 3 String to Integer (atoi) 64 3. 4 Add binar 66 3.5 Longest Palindromic Substring 灬66 3.6 Regular Expression Matching 3.7 Wildcard matching. 171 3.8 Longest Common Prefix ∴72 3.9 Valid Number 3.10 nt 75 3.11 Roman to Integer……176 3. 12 Count and Say 77 3.13 Anagrams… 3. 14 Simplify path............ 3. 15 Length of Last Word 80 第4章栈和队列 .:..:::.:· 81 1栈. 4.1.1 Valid Parentheses 4.1.2 Longest Valid Parentheses 81 4.1.3 Largest Rectangle in Histogram 84 4.1. 4 Evaluate reverse polish notation 85 4.2队列 5.1二叉树的遍历…… 87 2. 1. 1 Binary Tree Preorder Traversal. 5.1.2 Binary Tree Inorder Traversal 5.1.3 Binary Tree Postorder Traversal 91 5. 1. 4 Binary Tree Level Order Traversal .94 5.1.5 Binary Tree Level Order Traversal I 95 5.1.6 Binary Trce Zigzag Level Order Traversal 5.1.7 Recover binary Search Tree 99 1.8 Same Tree 100 0 I 9 Symmetric Ti 5.1.10 Balanced binary Tree...….……102 5. 1. 11 Flatten Binary Tree to Linked List 103 5. 1. 12 Populating Next Right Pointers in Each Node II 5.2二叉树的构建. 2. 2. 1 Construct Binary tree from Preorder and inorder traversal 5. 2.2 Construct Binary Tree from Inorder and Postorder Traversal..107 5.3二叉查找树 5.3. I Unique Binary Search Trees 108 5.3.2 Unique Binary Search Trees Il 纸上得来终觉浅,绝知此事要躬行 5.3.3 Validate Binary Search Tree 5. 3. 4 Convert Sorted array to Binary Search Tree 111 5. 3. 5 Convert Sorted List to Binary Search Tree 112 5.4二叉树的递归 114 4.I Minimum Depth of binary tree 5.1.2 Maximum Depth of binary Tree 2.4.3 Path sum 16 2. 4.4 Path su li ……116 2.4.5 Binary Tree Maximum Path Sum 5.4.6 Populating Next Right pointers in Each Node 119 5.4.7 Sum root to leaf numbers 20 第6章排序 6.1 Merge Sorted Arr 6. 2 Merge Two Sorted lists ..::::::..·.:.:::.·.· 121 6.3 Merge k Sorted Lists 6.4I Sort list 6.5 Sort list 124 6. 6 First Missing posit 6.7 Sort colors…… 26 第7章查找 7. 1 Search for a ral 128 7.3 Search a 2d matrix .130 第8章暴力枚举法 灬131 8. 1 Sub 8.1.1递归 132 8.1.2迭代 34 8.2 Subsets li 35 8.2.1递归 136 8.2.2迭代 138 8. 3 Permutations .139 8. 3. 1 next permutation ..:.:...::::::. 39 8.3.2重新实现 next permutation0 8.3.3递归. 8.4 Permutations li….,,………1241 8.4.1 next permutation( 142 8.4.2重新实现 next permutation 42 8.4.3递归… 142 8. 5 Combinations 143 8.5.1递归. 44 5.2迭代 144 8.6 Letter combinations of a Phone Number 145 8.6.1递归. 145 8.6.2迭代 146 第9章广度优先搜索 147 纸上得来终觉浅,绝知此事要躬行 9.1 Word ladder… 9.2 Word Ladder ii 149 9.3 Surrounded regions………….… 9.4小结 9.4.1适用场景 9.4.2思考的步骒…… 9.4.3代码模板 54 第10章深度优先搜索… 158 10. 1 Pal indrome Partitioning 10. 2 Nique Paths 161 0.2.1深搜 61 10.2.2备忘录法 162 10.2.3动规. 10.2.4数学公式.… 10.3 Unique Paths Il 64 10.3.1备忘求法…… 164 10.3.2动规 .165 10.4N-Qu 10.5 -Qucens II 16 6 Restore ip addresses 10.7 Combination Su 10.8 Combination sum ii 171 10.9 Generate Parentheses 172 10.10 Sudoku Solver 10.11 Word s 175 10.12小结 176 0.12.1适用场景 10.12.2思考的步骤 177 10.12.3代码模板…. 着着··, 78 10.12.4深搜与回溯法的区别 179 10.12.5深搜与递归的区别…… 第11章分治法 11.1 Pow(x, n)....... 179 11.2Sqrt(x)… 着着,着看 第12章贪心法. .181 12.1 Jump Game 12. 2 Jump Game II 82 12.3 Best Time to Buy and Sell stock 84 12.4 Best Time to Buy and Sell stock II.……184 12. 5 Longest Substring Wi thout repeating Characters...... 12. 6 Container With Most Water 186 第13章动态规划 13. 1 Triangl 13.2 Maximum Subarray 188 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论