目录
应届生面试算法就考个数组 链表 二叉树 矩阵 数组变着法子考你排序 查询 指针 位运算 链表变着法子考你指针 最多再考个哈希 二叉树变着法子考用递归和栈前中后遍历 最多加上回溯 矩阵的话就是知道起点的路径查询和不知道起点的路径查询 掌握了这些面大厂就比较轻松了,其实和学历技术关系也不大 大部分人先死在了想都不敢想上。
一、LeetCode简介
据了解,LeetCode 是一个非常棒的 OJ(Online Judge)平台,收集了许多公司的面试题目。相对其他 OJ 平台而言,有着下面的几个优点:
- 题目全部来自业内大公司的真实面试
- 不用处理输入输出,精力全放在解决具体问题上
- 题目有丰富的讨论,可以参考别人的思路
- 精确了解自己代码在所有提交代码中运行效率的排名
- 支持多种主流语言:C/C++,Python, Java
- 可以在线进行测试,方便调试
二、刷leetcode的主要目的
- 熟悉各互联网公司的算法题目,为找工作做准备。
- 复习以前学过的编程语言,LeetCode支持几乎所有主流编程语言,大家可以用不同语言来做题。
- 熟悉常见的算法和数据结构,LeetCode提供了交流平台,一些大神会将自己的解法贴出来共享,有些巧妙的解法实在令人叫绝。
- 学习别人的编程思维,加快编程的速度,避免常见的BUG。
另外LeetCode的题型都非常简单明了,并不需要的复杂的理解,一般都在50行以内就可以解决了,如果你写了上百行代码,就肯定说明你想太多了或太复杂,虽然都能用很短的代码就能解决,但并不意味着LeetCode的题目非常简单,实际上LeetCode基本上涉及到了所有常规的算法类型。
刷 LeetCode 的最大好处就是可以锻炼解决问题的思维能力,相信我,如何去思考本身也是一个需要不断学习和练习的技能。此外,大量高质量的题目可以加深我们对计算机科学中经典数据结构的深刻理解,从而可以快速用合适的数据结构去解决现实中的问题。我们看到很多ACM大牛,拿到题目后立即就能想出解法,大概就是因为他们对于各种数据结构有着深刻的认识吧。
三、常用的数据结构
- Stack:简单来说具有后进先出的特性,具体应用起来也是妙不可言,可以看看题目 32. Longest Valid Parentheses。
- Linked List:链表可以快速地插入、删除,但是查找比较费时(具体操作链表时结合图会简单很多,此外要注意空节点)。通常链表的相关问题可以用双指针巧妙的解决,160. Intersection of Two Linked Lists 可以帮我们重新审视链表的操作。
- Hash Table:利用 Hash 函数来将数据映射到固定的一块区域,方便 O(1) 时间内读取以及修改。37. Sudoku Solver 数独是一个经典的回溯问题,配合 HashTable 的话,运行时间将大幅减少。
- Tree:树在计算机