博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。
完善中......
由于本人平时刷题比较零散,有时候找起来不是很方便,所以统一将题目记录于此。主要的题目来源自:剑指 Offer、LeetCode、左神算法、面试、笔试、面经等等。下面按照分类记录:
说明(个人见解):
一、标注说明
标注手撕:必须掌握,熟练写出 code;
标注星号:星号越多越重要;
标注加分:一般此类都是算法不容易实现,但是需要掌握思想,面试加分。
二、刷题顺序
1、了解基本的数据结构与算法的知识:
- 常用的数据结构:数组、链表、栈、队列、哈希表、树、图等的基本概念和实现;
- 常用的算法:DFS / BFS、最短路径算法(Dijkstra)、贪心算法、动态规划、蓄水池算法、Manacher 算法等;
- 常用的编程技巧:递归:递归非常重要,要认真理解递归的过程;
2、《剑指Offer》:
《剑指Offer》非常重要,可以看各大公司的面经,很多手撕代码都出自于《剑指Offer》,所以多刷几遍,每一题都务必能快速的手写出来。
3、LeetCode:
《剑指Offer》刷完了,可以先刷 LeetCode 的 Top100,当然你也可以根据自身的情况,刷自己薄弱的专题。大部分公司的笔试题都是出自于 LeetCode,原题或者改编,重要性就不用多说了;
4、左神算法班:
这个因人而异了,如果你对算法题比较敏感,这个阶段是可以跳过的。但是如果对算法不是很有信心或者准备的比较晚,还是比较推荐左神的算法班,分为初级和高级,会串讲基本的数据结构和对应的题目。
5、最后:
算法的重要性:得算法者得 Offer。大公司非常看重算法,即便内推,但是面试环节几乎都会手撕代码,如果这个环节出了问题,会大打折扣。
一、基础数据结构篇
排序
查找
前缀树
二、实战篇
1、数组
1、找出数组中出现次数大于数组长度一半和 N / K 的数【剑指Offer + 左神】【手撕】
2、数组的奇偶位置问题:给定一个整型数组,请在原地调整这个数组,保证要么偶数位置上都是偶数,或者奇数位置上都是奇数。
3、调整数组顺序使奇数位于偶数前面【剑指Offer】【手撕】
5、求一个数组中的第 k 小 / 大的数【BFPRT 算法、快排】【手撕】
6、将一个整数数组划分为K个相等的子集问题【LeetCode + 字节跳动面试题】
10、找出数组中只出现一次的那个数,其他都出现两次【字节跳动面试题】
11、子数组问题:在条件下,每一个位置的元素都会作为子数组的开头或者结尾元素,那么遍历完整个数组,结果一定在其中
- 子数组最大累乘积:给定一个 double 类型的数组 arr,其中的元素可正、可负、可 0,返回子数组累乘的最大乘积。
- 需要排序的最短子数组长度
- 最长的可整合子数组的长度
- 最短无序连续子数组:双指针实现【LeetCode】
- 连续子数组的最大和【剑指Offer】:推荐动态规划实现【手撕】
2、字符串
1、字符串的排列与组合【手撕】
2、最长回文子串:暴力+动态规划+Manacher算法【手撕:推荐用动态规划】
3、正则表达式匹配:实现一个函数用来匹配包括'.'和'*'的正则表达式【剑指Offer】