leetcode算法题总结

1、面试题整理

1.1 入门

1)两数之和(1, easy)
考察对map的使用,通过空间换时间

2)有效的括号(20, easy)
考察对map的使用,需要会对containsKey灵活使用

3)二分查找(704,easy)
考察最基础的分治算法的理解

1.2 基础

1)两数相加(2, middle)
考察的比较基础,需要注意进位、取模的逻辑。特别是代码要精简,写出来的代码逻辑不能特别地乱,或者说重复。

2)岛屿数量(200,middle)
考察的是递归写法,以及对二维数组边界的判断。
递归写法比较简单,非递归写法比较考验基础。

1.3 适合1-3年面试

1)三数之和(15, middle)
考察对双指针的理解

2)无重复字符的最长子串(3, middle)
考察对滑动窗口的理解。

3)最长回文子串
容易想到的是中心扩散法,进一步优化可以使用动态规划。
最长回文子串最佳解法

4)四数之和(18, middle)
三数之和的升级版,还是考察队双指针的理解,同时也考察处理复杂业务代码的能力(业务逻辑比三数之和更复杂了)。

5)和为 K 的子数组(560,middle)
使用前缀和的方法,将问题转化为求解两个前缀和之差等于k的情况。

6)数组中的第K个最大元素(215,middle)
面试高频题,考察随机快排的应用。很典型的一道题。

7)最大子数组和(53,middle)
代码量很小,有点像智力题,抓住关键点(既然是连续序列且求最大和,判断下要不要取前面的子序列和就行了)就很容易做出来。

8)最长回文子序列(516,middle)
一道动态规划的典型题目,代码量不大,既考察智力又考察动态规划,非常适合作为面试题目。

9)编辑距离(72,middle)
考察分治思想和动态规划,代码量适中,非常适合作为面试题目。

10)二叉树的层序遍历(102,middle)
考察递归写法和非递归写法。
非递归写法用一个队列保存当前层的节点,遍历的时候注意提前记下当前层的节点个数,遍历的时候只处理当前层的节点,下一层的节点继续进入队列。

11)重排链表(143,middle)
考察智力或者平时的刷题能力。核心是先要找到链表中点,然后反转中点后的链表,最后将两段链表进行合并。
一道题里面集合了3个小方法(链表原地反转、寻找链表中点、链表合并),代码量适中,适合作为面试题。

1.4 适合3年以上面试

1)最长递增子序列(300, middle)
2)LRU 缓存
考察缓存的基本功、以及hashmap与双向链表数据结构整合的理解。
LRU缓存解法
3)正则表达式匹配(hard)
动态规划、逻辑挺绕的。能做出来,说明刷题基础很扎实。
4)滑动窗口最大值(hard)
考察是否会用单调队列来解决如何在O(n)时间内记录窗口内最大值的问题。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值