- 49: 字母异位词分组 ans[medium]
- 字符串内部排序作为key + hashMap统计
- 128: 最长连续序列 ans[medium]
- hashMap数组去重 + 遍历x, x+1, x+2, ... + 检查 x-1是否存在,避免重复扫描
- 169: 多数元素 ans[easy]
- hashMap计数 + 遍历统计
- 239: 滑动窗口最大值 ans[hard]
- MaxHeap: 插入右边的item + item (val, idx) + idx判断是否在win里面
- 523: 连续的子数组和 ans[medium]
- 560: 和为 K 的子数组 ans[medium]
- 前缀和:O(n)遍历数组,计算前缀和,找到目标值,更新hash table
- 974: 和可被 K 整除的子数组 ans[medium]
- 1590: 使数组和能被P整除 ans[medium]
- 45: 跳跃游戏 II ans[medium]
- 贪心:统计当前最远可达距离,注意加步数的条件
- 53: 最大子数组和 ans[medium]
- 贪心:当前和如果为负数的话,应该重新清零开始计算
- 55: 跳跃游戏 ans[medium]
- 同45,判断当前可达最远距离是否满足边界
- 70: 爬楼梯 ans[easy]
- 118: 杨辉三角 ans[easy]
- dp[i][j] = dp[i - 1][j] + d[i - 1][j - 1]
- 121: 买卖股票的最佳时机 ans[easy]
- 122: 买卖股票的最佳时机 II ans[medium]
- 413: 等差数列划分 ans[medium]
- 763: 划分字母区间 ans[medium]
- 统计每个字母出现的最后位置,然后同45, 55
- 1094: 拼车 ans[medium]
- 1109: 航班预订统计 ans[medium]
- 3: 无重复字符的最长子串 ans[medium]
- 滑动窗口 + 字符串判断重复
- 5: 最长回文子串 ans[medium]
- 11: 盛最多水的容器 ans[medium]
- 双指针:从两端开始扫,哪端高度小,调整哪端
- 15: 三数之和 ans[medium]
- 双指针 + 排序 + 去重:相同元素要去重
- 42: 接雨水 ans[hard]
- 双指针:遍历每一列,计算其左边max、右边max,再计算面积,可以优化提前计算每一列左边和右边的max
- 76: 最小覆盖子串 ans[hard]
- 滑动窗口:用hashmap判断是否为子串
- 189: 轮转数组 ans[medium]
- 旋转数组:整体旋转一次 + 分别旋转两次 + 不使用额外的空间
- 209: 长度最小的子数组 ans[medium]
- 283: 移动零 ans[easy]
- 双指针:先移动非零,再填0
- 438: 找到字符串中所有字母异位词 ans[medium]
- 滑动窗口 + 判断是不是异位词
- 1004: 最大连续1的个数 III ans[medium]
- 1208: 尽可能使字符串相等 ans[medium]
- 33: 搜索旋转排序数组 ans[medium]
- 分段**:看成两段有序的数组,分别进行二分查找
- 34: 在排序数组中查找元素的第一个和最后一个位置 ans[medium]
- 二分查找找到target的idx,在向两边搜索到边界
- 35: 搜索插入位置 ans[easy]
- 二分查找
- 74: 搜索二维矩阵 ans[medium]
- 两次二分查找
- 75: 颜色分类 ans[medium]
- 维护一个头部的index,不断交换对应的数字到头部的index,排完0和1,2自然就排序好了
- 56: 合并区间 ans[medium]
- 先sort区间的leftBound,然后再遍历,看是否需要合并
- 240: 搜索二维矩阵 II ans[medium]
- 每行分别进行二分查找
- 406: 根据身高重建队列 ans[medium]
- 853: 车队 ans[medium]
- 6: N字形变换 ans[medium]
- 8: 字符串转换整数 (atoi) ans[medium]
- 43: 字符串相乘 ans[medium]
- 165: 比较版本号 ans[medium]
- 1071: 字符串的最大公因子 ans[easy]
- 17: 电话号码的字母组合 ans[medium]
- 22: 括号生成 ans[medium]
- 37: 解数独 ans[hard]
- 46: 全排列 ans[medium]
- 标准回溯问题:回溯三部曲:回溯函数模板返回值以及参数,回溯函数终止条件,回溯搜索的遍历过程
- 60: 排列序列 ans[hard]
- 77: 组合 ans[medium]
- 78: 子集 ans[medium]
- 标准回溯问题:注意停止回溯的条件
- 113: 路径总和 II ans[medium]
- 20: 有效的括号 ans[easy]
- 基本栈操作
- 84: 柱状图中最大的矩形 ans[medium]
- 单调栈:单调递增,统计左边,右边的最近小于的高度,注意边界值处理
- 155: 最小栈 ans[medium]
- 维护两个栈:realStack + minStack
- 394: 字符串解码 ans[medium]
- 基本栈操作 + 倒序遍历字符串
- 数字栈 + 字符栈:逆波兰表达式
- 678: 有效的括号字符串 ans[medium]
- 维护两个栈:* + ()
- 739: 每日温度 ans[medium]
- 单调栈:单调递减
- 84: 柱状图中最大的矩形 ans[medium]
- 962: 最大宽度坡 ans[medium]
- 160:相交链表 ans[easy]
- 暴力一些,直接用hashmap存node的指针
- 1: 两数之和 ans[easy]
- 2: 两数相加 ans[medium]
- 4: 寻找两个正序数组的中位数 ans[hard]
- 7: 整数反转 ans[medium]
- 9: 回文数 ans[easy]
- 13: 罗马数字转整数 ans[easy]
- 41: 缺失的第一个正数 ans[hard]
- 原地hash: f(nums[i]) = nums[i] - 1
- 48: 旋转图像 ans[medium]
- 推公式:计算旋转之后的坐标
- 54: 螺旋矩阵 ans[medium]
- 模拟旋转状态:状态数组,记录每个方向时候如何更新row和col
- 66: 加一 ans[easy]
- 73: 矩阵置零 ans[medium]
- 标记数组: 行标记 + 列标记 + 遍历判断
- 136: 只出现一次的数字 ans[easy]
- 异或: 相同为0,不同为1, 出现两次的数直接消掉
- 238: 除自身以外数组的乘积 ans[medium]
- 构建左边的乘法表 * 右边的乘法表,转成O(n)
- 1089: 复写零 ans[easy]