二、刷题顺序

1、了解基本的数据结构与算法的知识:

常用的数据结构:数组、链表、栈、队列、哈希表、树、图等的基本概念和实现;

常用的算法:DFS / BFS、最短路径算法(Dijkstra)、贪心算法、动态规划、蓄水池算法、Manacher 算法等;

常用的编程技巧:递归:递归非常重要,要认真理解递归的过程;

2、剑指Offer:

《剑指Offer》非常重要,可以看各大公司的面经,很多手撕代码都出自于《剑指Offer》,所以多刷几遍,每一题都务必能快速的手写出来。

3、LeetCode:

《剑指Offer》刷完了,可以先刷 LeetCode 的 Top100,当然你也可以根据自身的情况,刷自己薄弱的专题。大部分公司的笔试题都是出自于 LeetCode,原题或者改编,重要性就不用多说了。

4、左神算法班:

这个因人而异了,如果你对算法题比较敏感,这个阶段是可以跳过的。但是如果对算法不是很有信心或者准备的比较晚,还是比较推荐左神的算法班,分为初级和高级,会串讲基本的数据结构和对应的题目。

5、最后:

算法的重要性:得算法者得 Offer。大公司非常看重算法,即便内推,但是面试环节几乎都会手撕代码,如果这个环节出了问题,会大打折扣。

刷题指南

说明:本文一共列出了 125 道经典的面试手写算法题目,为了文章篇幅不过长,题目链接和具体代码就没有贴出,直接百度题目,肯定可以搜到。这些题目的代码详解都记录在了我的博客里:https://blog.csdn.net/pcwl1206/article/details/97390314

1. 数组

  1. 找出数组中出现次数大于数组长度一半和 N / K 的数
  2. 数组的奇偶位置问题:给定一个整型数组,请在原地调整这个数组,保证要么偶数位置上都是偶数,或者奇数位置上都是奇数
  3. 调整数组顺序使奇数位于偶数前面