DeppWang / LeetCode

个人 LeetCode 题解,用图片的形式展示解题思路

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

个人 LeetCode 题解,用图片的形式展示解题思路。

各题型常见「套路」

  • 数组:哈希表、双指针、栈
  • 链表:假节点、指针、双指针、假节点+双指针、递归、下一个节点
  • 数学:哈希表
  • 字符串:滑动窗口、动态规划、栈、双指针
  • :递归 or 栈
  • :辅助栈

数组

哈希表

  • 1. 两数之和:使用哈希表的 contains() 来比较其他元素是否符合条件,避免一一比较
  • 136. Single Number:判断是否在 Set 中,在则删除,不在则添加,Set contains() 的时间复杂度为 O(1)

双指针

  • 4. Median of Two Sorted Arrays:使用双指针,依次比较元素大小,小的加入到合并数组。
  • 11. Container With Most Water:左右指针向中间遍历,大的固定,小的移动。最大的将始终固定。
  • 26. 删除排序数组中的重复项:找到后面不重复元素(判断条件:当前元素和上一个元素是否相等),依次覆盖前面的元素,标签:快慢指针
  • 27. 移除元素:不删除,只覆盖。相向(拷贝)覆盖:后面的非目标值覆盖前面的目标值,标签:同向(快慢)双指针。相向(拷贝)覆盖:右边的所有值(包含目标值)覆盖左边的目标值,标签:相向(左右)双指针
  • 88. 合并两个有序数组:比较得到两个数组最大的元素,作为最大值放在最后。
  • 905. 按奇偶排序数组:将后面的偶数跟前面的奇数交换。标签:前后双指针

三指针

  • 15. 3Sum:先排序,3 数之和转换为 2 数之和,i 始终为负,左右指针向内遍历得到结果
  • 16. 3Sum Closest:使用 diff 存放 target 和 sum 的差

二分查找

双重循环

一次遍历

其他

  • 35. 搜索插入位置:相当于返回目标值插入有序数组的位置,最直接的方式就是跟每一个元素比较
  • 53. 最大子序和:需要记录到当前值的最大连续和;正数增益:当前值加上一个正数才大于当前值。标签:正数增益
  • 54. 螺旋矩阵:四边有栏,栏往里缩
  • 66. 加一:从后往前遍历加 1,考虑 99->100

链表

假节点

指针

双指针

  • 141. 环形链表:有环:快指针跳两步,慢指针跳一步,两者总会相遇,标签:快慢指针

假节点 + 双指针

递归

  • 21. 合并两个有序链表:从最小的节点开始,将剩下的链表节点看成一个节点;递归找出剩下节点的最小节点。

其他

数学

哈希表

二分查找

字符串

Sliding Window(滑动窗口)

数组

  • 6. Z 字形变换:找到 x 坐标,坐标相同的放在一起,作为一个元素

动态规划:Dynamic programming,简称 DP。通过子问题解决父问题,即父问题答案可以通过子问题得到。

  • 5. 最长回文子串:先将字符串反转,两者比较,利用动态规划得到最长公共子串。再排除字符串首尾是反向副本的情况(aacdcaa
  • 91. 解码方法从后往前遍历,当前子序列的和(解码方法数)跟上一个和上上个子序列的和相关

  • 20. 有效的括号:利用栈,将字符串的字符依次入栈,弹出直接闭合的字符,最后栈为空,则为有效字符。
  • 38. 外观数列:利用栈得到相同元素的个数。

双指针

  • 28. 实现 strStr():将 needle(目标字符串) 依次与字符串 haystack 长度为 needle 的子串比较,完全相同则返回子串的数组下标。
  • 151. 颠倒字符串中的单词:利用双指针和字典,将每个单词的第一个字符和最后一个字符位置对应关系保存

其他

它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势

递归 or 栈(深度优先遍历)

队列(广度优先遍历)

辅助栈

  • 155. 最小栈:栈存放正常元素,辅助栈存放最小元素。第一个元素为最小元素,如果后面比它小,入「小栈」,否则入「正常栈」
  • 232. 用栈实现队列:使用两个栈,栈 s1 作为数据存储,辅助栈 s2 作为临时缓冲。

数据库


动态规划

当前运算依赖上一个运算的结果

思考

两个难点:

  1. 整体思路
  2. 将思路转换为代码

LeetCode 题库地址:https://leetcode-cn.com/problemset/all/

深度优先搜索(深度优先遍历) Depth-First-Search,简称 DFS,递归(栈)实现

宽度优先搜索(广度优先遍历)Breadth-First-Search,简称 BFS,队列实现

About

个人 LeetCode 题解,用图片的形式展示解题思路


Languages

Language:CSS 100.0%Language:Shell 0.0%