跳转至

就只记录需要复习的题型了

链表

  • 合并两个有序链表:这种基础题目半天没做出来,纯是罪过。
  • 合并K个有序链表:没有用最优的方法去做,多个同时合并()
  • 环形链表II:推导思路没想起来
  • 丑数II:完全没思路
  • 两数相加:进阶方式怎么做?
  • 旋转链表:直接硬转了。。。但是最简单的方式就是闭合为环

数组

  • 反转字符串中的单词:第一次很快想出来,第二次怎么卡了?

滑动数组:

关键词:字母替换,异位词,最长连续,限制长度范围(连续范围) - 最小覆盖子串Hard:有点思路但补全,没做出来 - 将 x 减到 0 的最小操作数:没做出来,逆向思维,边界判断要快准狠 - 424. 替换后的最长重复字符:转换目标计算方式。 - 至少有 K 个重复字符的最长子串:沙比题目,这也能滑 - 存在重复元素 III。Hard,大部分对了但超时。

动态规划

  • 零钱兑换:做的太慢,背包不熟。记忆化搜索可以了解一下
  • 俄罗斯信封问题:做的慢,不熟,超时。

方法总结

1.链表

题型:双指针、快慢指针、双指针合并链表、优先队列合并k个链表、反转链表(栈、递归、迭代) - 时刻注意判断空链表 - 重构新的链表:最好还是增加一个头节点,减少工作量。 - 链表重排时,记得把调整节点的前一节点的下个位置置空 - 多多利用dummy虚拟头节点简化问题 - (多个有序,求第k大问题):都是合并k个链表问题

2.滑动数组

  • 左右子串不要判断错了
  • 条件判断,窗口比匹配目标必定没结果
  • 做字母匹配,一般需要一个哈希存目标字母,一个哈希存当前窗口字母
  • 推荐以while以-1为滑动窗口的起始值,或者用for循环以0作为右窗口起始值。

10.动态规划

  • 本质是记忆化搜索,尽量掌握
  • 注意边界条件,注意下标。
  • 背包问题,二维学会优化数组