哈希表 or 切片操作 or stack
1. 两数之和 (attention break)
https://leetcode-cn.com/problems/two-sum/
需要理解把复杂问题简单化,也就是切片处理.
既然原数据集较大,我们可以分开处理,利用list特点,完美将i,j剥离开
或许还可以考虑使用双哈来空间换时间
2. 有效的括号(stack)(pop in judge line)
https://leetcode-cn.com/problems/valid-parentheses/
利用栈的性质
判断的时候要趁机pop
判断empty来决定结果
3. LRU(其实就一概念题)(get操作要记得更新)
https://leetcode-cn.com/problems/lru-cache/
双链表+哈希表
4. 栈实现队列 (基操)
https://leetcode-cn.com/problems/implement-queue-using-stacks/
5. 行星碰撞 (注意正负)
https://leetcode-cn.com/problems/asteroid-collision/
6. 困难计算器(流畅写下来就对栈挺清楚的了)(sign,num,res)
https://leetcode-cn.com/problems/basic-calculator/
公式 res += sign*num 出现了三次
要明白为什么要用栈存储上一组值
c.isdigit()判定数字
同时储存res.append([sign, res])
7. 字符串解码
https://leetcode-cn.com/problems/decode-string/
和困难计算器一模一样
8. 删除字符串中的所有相邻重复项
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
用栈啊兄弟!!!!!!!!
9. 砖墙
https://leetcode-cn.com/problems/brick-wall/
要利用好字典
没有一行新的砖重叠,那就加一
记住不能取最后一块砖哦
10. 颜色排序
https://leetcode-cn.com/problems/sort-colors/
深拷贝
妙用列表,有点类似于字典
滑动窗口为了你
1. 和为s的连续正数序列
https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/
while的=,空间control
利用target//2来减少复杂度(二分就是那么好用)
i,j 哪个是终点值呢?
换个角度看世界之降低复杂度
1. 最长回文子串(中心扩展)
https://leetcode-cn.com/problems/longest-palindromic-substring/
封装好三个函数
helper函数负责判定以及更新
奇偶两次调用,每个中心不要忘掉.(2N-1)
厉害的双指针
1. 删除链表的倒数第N个节点
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
先选定指针之间的长度(快指针负责先到位)
长度遍历时一定要考虑到如果删除的是头节点怎么办,如果是头节点直接返还head.next就好了
选定之后两个指针齐头并进
最后通过double next跳跃即可
2. 反转链表 (双指针赛高,注意dump)
https://leetcode-cn.com/problems/reverse-linked-list/
非常基础,需要注意的就是将cur.next事先封存即可
3. 字符串相加
两数之和与这道题一样,注意中间的int
4. 链表的中间节点(注意一下边界左右,cue.next and cue.next.next)
https://leetcode-cn.com/problems/middle-of-the-linked-list/
常规操作
需要考虑是左边界还是右边界
5. 两数相加
https://leetcode-cn.com/problems/add-two-numbers/
注意初始结点和操作结点
记住r.next
6. 字符串压缩 (字符串的问题优先考虑双指针)(注意str(i-j))
https://leetcode-cn.com/problems/compress-string-lcci/
可以注意仅仅赋值一个变量i即可,在一层循环中使用j=i赋值
利用i=j来更新慢指针位置
7. 字符串相乘 (倒着来,两个标志)
https://leetcode-cn.com/problems/multiply-strings/
8. 删除(跳过)链表的结点
https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/
和第一题道理一样,需要注意的是两个指针并排向前走,当面对VAL=TARGET的时候,后指针完成跳跃即可
链表题一定要判断头节点
9. 接雨水(要理解)
https://leetcode-cn.com/problems/trapping-rain-water/
10. 反转单词(纯手写)(双指针集大成者)
https://leetcode-cn.com/problems/reverse-words-in-a-string/
递归大法好
1. 合并K个排序链表(结合链表融合以及归并思想)
https://leetcode-cn.com/problems/merge-k-sorted-lists/
2. 链表排序(拆开再排,从底向上)
https://leetcode-cn.com/problems/sort-list/
复杂度太高?我们来二分
1. Pow(x, n) (注意奇偶)
https://leetcode-cn.com/problems/powx-n/
理解递归精髓
把大问题切分,想象触碰到叶子节点时的感觉
递归到一个值再进行处理
2. 排序数组查找次数(双二分)
https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/
双二分,左右边界,第一分完讨论情况
引出一个新问题,二分的右起点到底是从哪里开始的?
3. x的平方根 (x//2)
https://leetcode-cn.com/problems/sqrtx/
l is bigger than r, always
right place
while
4. 缺失的数字(左右边界很好诠释)
你真的能理解为什么要分左右边界吗?
问问自己
你能吗?
https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/submissions/
DP(问题太难怎么办?想想怎么拆了他)
1. 最大子序和
https://leetcode-cn.com/problems/maximum-subarray/
2. 编辑距离(好好想一想递归的精髓)
https://leetcode-cn.com/problems/edit-distance/
3. 股票家族
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/
4. LCS
https://leetcode-cn.com/problems/longest-common-subsequence/
5. 剪绳子(状态!状态!)
https://leetcode-cn.com/problems/jian-sheng-zi-lcof/
贪心
1. 分糖果
前后两次,以S[I]为中心
https://leetcode-cn.com/problems/candy/
2. 连续数组的最大子序和
https://leetcode-cn.com/problems/maximum-subarray/
每一步都要贪心呢
排序
1. 合并区间(排序之后慢慢来嘛)
https://leetcode-cn.com/problems/merge-intervals/
2. 数组中的第K大元素 (小顶堆安排)
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
离一铭哥家很远的二叉森林
1. 平衡二叉树(前面的已经比较完了,所以后面的要取max)
https://leetcode-cn.com/problems/balanced-binary-tree/
一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1
注意每次返回小子树的高度
利用这个作为判定条件,设置-1为FLAG
2. 二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
基础中的基础,碰触到叶子节点记住加一即可
3. 二叉树的直径
https://leetcode-cn.com/problems/diameter-of-binary-tree/
相当于是最大深度的变形,只需要保留一个最大结果。
4. 重建二叉树(都是递归,概念题,自己要读出来)
https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/
三加一,一不加
5. 反转二叉树 (递归~)
https://leetcode-cn.com/problems/invert-binary-tree/
没什么好说的,用语法糖直接反转就好了
6. 验证二叉搜索树
https://leetcode-cn.com/problems/validate-binary-search-tree/
中序遍历的顺序加上set去重
7. 树的子结构
https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
注意逻辑,从例子入手,解释给自己听。
递归就是程序自动化。注意B要从头比。
奇技淫巧
1. 只出现一次的数字(位运算)
https://leetcode-cn.com/problems/single-number/
2. 跳跃游戏(你到底能跳多远?)
https://leetcode-cn.com/problems/jump-game/
DFS
1. 小岛问题(经典就完事儿了)
https://leetcode-cn.com/problems/number-of-islands/
2. 矩阵中的路径(边界条件注意一下)
https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/
3. 单词搜索
https://leetcode-cn.com/problems/word-search/
4. 机器人的运动范围
https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/