免费网站设计定制,个人网站建设基础与实例,led灯什么网站做推广好,青岛网站开发企业文章目录零. Java 常用接口函数一. 动态规划二. 链表三. 哈希表四. 滑动窗口五. 字符串六. DFS、BFS七. 二分法八. 二叉树九. 偏数学、过目不忘 and 原地算法等十. 每日一题前言#xff1a; 是时候开一个对于我的 LeetCode 专栏的总结索引了 虽然说大概只刷了150道左右#…
文章目录零. Java 常用接口函数一. 动态规划二. 链表三. 哈希表四. 滑动窗口五. 字符串六. DFS、BFS七. 二分法八. 二叉树九. 偏数学、过目不忘 and 原地算法等十. 每日一题前言 是时候开一个对于我的 LeetCode 专栏的总结索引了 虽然说大概只刷了150道左右不过应该也可以简单总结一下了 题型主要是 LeetCode hot100 剑指Offer也有其他的一些高频题 每日一题持续更新中 零. Java 常用接口函数
集合类
/*** tip 1注意多态情况下只能用父类函数想要用子类独占函数就得用子类声明**/// 1. ArrayList
list.add(element); // 加到尾部
list.size();Listint[] list new ArrayList();
int[][] arr list.toArray(new int[list.size()][2]); // 链表 - 数组
list Arrays.asList(arr); // 数组 - 链表
queue.stream().mapToInt(Integer::valueOf).toArray(); // Integer - int// 2. LinkedList
list.add(element); // 加到尾部
list.addFirst(element); // 加到头部list.removeFirst();
list.removeLast();list.getFirst();
list.getLast();// 3. Deque双向队列注意不能加入 null 元素而 LinkedList 可以
DequeInteger deque new ArrayDeque(); // ArrayDeque 可以作为队列、栈来用效率都更高
deque.offerFirst(element); // 加队头 or 加队尾
deque.offerLast(element); // 也可以换成 addFirst、addLastdeque.pollFirst(); // 出队头 or 出队尾会返回元素
deque.pollLast(); // 也可以换成 removeFirst、removeLastdeque.getFirst();
deque.getLast();// 4. HashMap
hashmap.put(k, v);
hashmap.get(k); // 获取 k 对应的 v
hashmap.size();
hashmap.isEmpty();
hashmap.containsKey(key1); // 判断 key1 是否存在
hashmap.containsValue(value1); // 判断 value1 是否存在// 5. HashSet
hashset.add(element);
hashset.contains(element);
hashset.remove(element);
hashset.size()// 6. Stack
stack.push();
stack.pop();
stack.peek();
stack.isEmpty();// 7. PriorityQueue 优先队列堆
// 知识点小顶堆存较大值大顶堆存较小值便于维护
// 注意泛型函数的 Labmda 表达式需要注明类型如下
PriorityQueueInteger queue new PriorityQueue((Integer a, Integer b) - (a - b));数学类
Math.max(num1, num2); // 取最大值
Math.min(num1, num2); // 取最小值
Arrays.sort(arr); // 排序数组
Arrays.sort(arr, (a, b) - (a[0) - b[0])) // 自定义排序方式的 sort字符串
// String
char[] arr s.toCharArray(); // 转化成字符数组提高
String s2 s1.substring(0, 3); // 截取闭开区间[0,3)
char c s1.charAt(1); // 选取元素效率比较慢
s.length(); // 用函数获取长度数组则直接 arr.length
s.split(,)// 分割字符串返回字符串数组注意不能用.)int num Integer.parseInt(s); // String 转换成 int
String s1 Integer.toString(num); // int 转换成 String
String s2 num; // 也可以这样做// StringBuilder这里的 leetcode 都是单线程因此不涉及 StringBuffer
sb.append(abc); // 添加到尾
sb.delete(1, 3); // 删除闭开区间[1, 3)的元素
sb.deleteCharAt(index); // 删除下标元素一. 动态规划 考察的大头了大部分题目都用的这玩意 知识点
三要素边界处理、最优子结构、状态转移方程滚动数组用于节约空间复杂度可能需要通过逆序处理来实现无后效性树形dp树结构的dp数位dp对象是数字的各个位的dp01背包问题取 or 不取的背包问题主要就是如何找出三要素O(1) 空间复杂度逻辑上的数组有时可以直接通过几个变量实现
题目 5.最长回文子串字符串 42. 接雨水常考的 hard思路还是挺好用的在后面刷题也有类似的做法 32. 最长有效括号算是比较有难度的 hard 了需要细分很多情况考虑边界 53. 最大子序和常考 easy 题思路还是很值得学习的负收益舍弃 128. 最长连续序列哈希表被字节面过 62. 不同路径dp入门题 64. 最小路径和同上 70. 爬楼梯同上 96. 不同的二叉搜索树有点东西的空树也算一种树方程推导思路也值得学习容易忘 309. 最佳买卖股票时机含冷冻期分状态股票系列 312. 戳气球很有意思的一道题状态考虑的思路很nice) 121 / 剑指 Offer 63. 买卖股票的最佳时机 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III树形 DP 221. 最大正方形思路题 279. 完全平方数思路题 322. 零钱兑换和上面的279思路很像这题麻烦点 338. 比特位计数位运算 1143. 最长公共子序列字符串 139. 单词拆分字符串 剑指 Offer 10-I. 斐波那契数列 剑指 Offer 60. n个骰子的点数 剑指 Offer 46. 把数字翻译成字符串 剑指 Offer 47. 礼物的最大价值 剑指Offer 43. 1~n 整数中1出现的次数数位dp 剑指Offer 19. 正则表达式匹配 72. 编辑距离字符串 ————————【背包】———————————— 416. 分割等和子集背包、滚动数组 494. 目标和背包、滚动数组 二. 链表
知识点
这块主要是链表结点之间关系的处理头结点、尾结点的边界处理也要注意小心空指针
题目 2.两数相加 21. 合并 2 个有序链表 23. 合并 K 个升序列表归并、分治很清晰的一道 hard有前导题 合并 2 个有序链表 19.删除链表的倒数第N个结点快慢指针 146. LRU缓存机制手写双向链表 调库HashMap注意结点关系处理 160. 相交链表原地算法有点偏数学 206. 反转链表 递归 or 迭代常考题了 25. K个一组翻转链表递归相当于 206.反转链表 递归 141. 环形链表快慢指针 142. 环形链表 II快慢指针公式 206. 反转链表递归 迭代两种做法 234. 回文链表反转 快慢指针 160. 相交链表 143. 重排链表快慢指针翻转链表 148. 排序链表双重递归、快慢指针、合并有序链表 剑指 Offer 06. 从尾到头打印链表 剑指 Offer 35. 复杂链表的复制哈希表、原地算法 三. 哈希表
知识点
HashMap 可以存 null 作为键值查询复杂度 O(1)
题目 1.两数之和 四. 滑动窗口
知识点
感觉这类题型大多应用主体都是字符串呀主要涉及到几点操作滑动窗口怎么拓增、缩小、移动
题目 3.无重复字符的最长字串HashMap 76. 最小覆盖子串和上面的3很像 438. 找到字符串中所有字母异位词 剑指 Offer 57- II. 和为 s 的连续正数序列 76. 最小覆盖子串字符串 五. 字符串 当然涉及字符串的很多题目也会在四.滑动窗口、一. 动态规划中出现这里不重复列出题目啦 知识点
写这里的题目要对 String、StringBuilder 的库函数有一定了解噢
题目 49. 字母异位词分组 20. 有效的括号栈 415. 字符串相加 394. 字符串解码 剑指 Offer 58 - I. 翻转单词顺序双指针 剑指 Offer 67. 把字符串转换成整数 六. DFS、BFS
知识点
DFS一路到底BFS用到队列一层一层地跑完剪枝通过限定条件减少需要递归的枝条提高效率boolean[] visited访问数组用于递归中记录是否访问过。一般会涉及回滚
题目 46. 全排列DFS、队列 39. 组合总和DFS、队列 22. 括号生成DFS、剪枝 17. 电话号码的字母组合DFS 78. 子集DFS) 79. 单词搜索 剑指 Offer 12 矩阵中的路径DFS 301. 删除无效的括号DFS字符串) 200. 岛屿数量DFS 剑指 Offer 13-. 机器人的运动范围DFS和岛屿问题一样用的感染方法呢 剑指 Offer 38. 字符串的排列字符串 剑指 Offer 93. 复原 IP 地址字符串 51. N 皇后字符串、经典题 207. 课程表图、BFS 399. 除法求值图、BFS 七. 二分法 诶二分法在 leetcode 题库里还是有一席之地的要学好也得多实践噢 知识点
二分法和时间复杂度O(logN)挂钩注意边界小心死循环分区 [left, mid][mid 1, right]注意 mid 的取值向上 or 向下while(left right) 循环中分两种情况、还是三种情况大于、等于、小于
题目 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索螺旋排序数组 4. 寻找两个正序数组的中位数二分排除 69. x 的平方根 35. 搜索插入位置内附二分法总结 162. 寻找峰值 八. 二叉树
知识点
搜索二叉树左子树均小于根右子树均大于根完全二叉树倒数第二层结点全满满二叉树倒数第一层结点全满自底向上从上往下递归再从下往上收束结果比如114. 二叉树展开为链表自顶向下从上往下不用返回结果来收束如 104. 二叉树的最大深度做二叉树的题目时多半用到递归那么可以多总结一下自底向上、自顶向下的情况。遇到题目的时候先分析是哪一种再回忆一下常用的处理思路。
题目 102. 二叉树的层序遍历DFS 队列即可 94 144 145. 二叉树的前序、中序、后序遍历迭代用栈后序新增pre结点 98. 验证二叉搜索树DFS、中序遍历pre 中序保证当前最左边 次左边对比 101. 对称二叉树递归 102. 层序遍历队列、递归 剑指 Offer 55 - II. 平衡二叉树DFS 104. 二叉树的最大深度DFS) 105. 从前序与中序遍历序列构造二叉树哈希表、递归还有前后、中后的题要多看 114. 二叉树展开为链表链表、递归、自底向上 617. 合并二叉树DFS) 226. 翻转二叉树DFS、自顶向下 || 自底向上 543. 二叉树的直径DFS、自底向上 124. 二叉树中的最大路径和自底向上 DFS 236. 二叉树的最近公共祖先自底向上 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 538. 把二叉搜索树转换为累加树自底向上 112. 路径总和 I 113. 路径总和 II 437. 路径总和 III双重递归 剑指 Offer 26-. 树的子结构 双重递归 剑指 Offer 33. 二叉树的后序遍历序列辅助栈 剑指 Offer 36. 二叉搜索树与双向链表链表、原地算法 117. 填充每个节点的下一个右侧节点指针 II原地 208. 实现 Trie前缀树 958. 二叉树的完全性检验BFS 199. 二叉树的右视图BFS 剑指Offer 37. 序列化二叉树队列、字符串 九. 偏数学、过目不忘 and 原地算法等 这一块是记录那些比较偏数学或者容易初见杀但是实际代码量不多 or 写过一遍就忘不掉思路的题目。 知识点
原地算法O(1)空间复杂度要求原地的题目不少看看能不能总结点规律出来
题目 55. 跳跃游戏贪心法 48. 旋转图像原地算法、矩阵转置 15. 三数之和双指针 11. 盛最多水的容器双指针 7. 整数反转对溢出判断的做法很值得学习 6. Z字形变化主要考察思路的一道题思路比较独特类似压缩 56. 合并区间双指针排序(用了一波 Arrays.sort(arr, Lambda)还有链表 - 数组转化 84. 柱状图中最大的矩形单调栈 85. 最大矩形用到84动态规划 406. 根据身高重建队列逆序排 正序排 253. 会议室上下车问题 169. 多数元素摩尔投票法 155. 最小栈栈 剑指 Offer 59 - II. 队列的最大值最大队列和最小栈差不多 283. 移动零 470. 用Rand7()实现Rand10()常考题、代码少 461. 汉明距离位运算 347. 前K个高频元素优先队列 263. 丑数 232. 用栈实现队列 225. 用队列实现栈类似 GC 复制算法 88. 合并两个有序数组双指针 剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面双指针 剑指 Offer 61-. 扑克牌中的顺子哈希表 剑指 Offer 65. 不用加减乘除做加法位运算 剑指 Offer 64. 求1 2 … n限制语法、二刷 剑指 Offer 31. 栈的压入、弹出序列 剑指 Offer 16. 数值的整数次方分治 剑指 Offer 45. 把数组排成最小的数Lambda 剑指 Offer 14. 剪绳子 I、II动态规划、数学方法 621. 任务调度器桶 找数合集
剑指 Offer 03. 数组中重复的数字原地数组转换成逻辑上的哈希表很有意思 136. 只出现一次的数字位运算亦或性质同数得0与0不变 剑指 Offer 56 . 数组中数字出现的次数类似上面的136但是要复杂一点 448. 找到所有不存在的数原地 数组常用的取负、取余处理 287. 寻找重复数原地转换成逻辑上的链表再进行找入环点操作环形链表II的兄弟题目 26. 删除有序数组中的重复项原地挺简单的。。逐个推就行 152. 乘积最大子数组重要记录 iMax、iMin根据新值决定交换 or 更新成当前值 215. 数组中的第K个最大元素TOP K快排、堆排 240. 搜索二维矩阵II 238. 除自身以外数组的乘积 27. 移除元素原地 41. 缺失的第一个正数构建哈希 54. 螺旋矩阵 560. 和为 k 的子数组前缀和哈希表 剑指 Offer 15-. 二进制中1的个数位运算 剑指 Offer 57-. 和为s的两个数字对撞双指针 剑指 Offer 62. 圆圈中最后剩下的数字约瑟夫环、数学方法 31. 下一个排列原地 剑指Offer 51. 数组中的逆序对归并排序 剑指Offer 59. I 滑动窗口的最大值单调队列 剑指Offer 41. 数据流中的中位数优先队列堆 581. 最短无序连续子数组
十. 每日一题 闲着也是闲着不如打打每日图个新鲜 比较简单的题就直接放题目地址了有点意思的就写篇博客记录 500. 键盘行打表题这里直接用 Map 映射就行 575. 分糖果用 Set然后理清楚问题本质即可四行代码解决 367. 有效的完全平方数二分法 or 数学公式 268. 丢失的数字还不错用的异或很巧妙 598. 范围求和 II思路转移 299. 猜数字游戏巧妙代码块 495. 提莫攻击一开始求稳想模拟但实际上正常循环即可 375. 猜数字游戏 IIDFS、动态规划有点像猜气球 319. 灯泡开关一行流纯数学题。模拟反而超时我觉得模拟意义还更大… 318. 最大单词长度乘积还不错位运算 563. 二叉树的坡度二叉树递归题还行 397. 整数替换DFS其实位运算更高效偷懒了 594. 最长和谐子序列滑动窗口感觉其实可以 mid 559. N 叉树的最大深度DFS和二叉树最大深度没啥区别… 384. 打乱数组洗牌算法 859. 亲密字符串分好情况就行 423. 从英文中重建数字字符串、偏思路 700. 二叉搜索树中的搜索简单DFS三行写完 519. 随机翻转矩阵双指针、随机 1446. 连续字符简单题我重拳出击 506. 相对名次哈希表 383. 赎金信简单题我重拳出击 1816. 截断句子转化成循环问题即可 794. 有效的井字游戏分好情况即可 709. 转换成小写字母接口题 1518. 换酒问题先换再喝注意结束条件 419. 甲板上的战舰类似岛屿数量进阶做法也只是修改一下即可 1609. 奇偶树BFS 1078. Bigram 分词跑一次遍历就行 89. 格雷编码三行代码板子题通信使用优点 1629. 按键持续时间最长的键题干最啰嗦的easy题… 334. 递增的三元子序列300的兄弟题偏思路 373. 查找和最小的 K 对数字堆、优先队列 1716. 计算力扣银行的钱公式题等差数列