03 2023 档案

摘要:1、110 平衡二叉树 递归法 求深度适合用前序遍历,而求高度适合用后序遍历。 class Solution { boolean flag = false; public boolean isBalanced(TreeNode root) { int height = getHeight(root) 阅读全文
posted @ 2023-03-30 16:32 黄三七 阅读(43) 评论(0) 推荐(0)
摘要:1、104 二叉树的最大深度 559 n叉树的最大深度 104 二叉树的最大深度 递归法 本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。 根节点的高度就是二叉树的最大深度,本题中通过后序求的根节点高度来求的二叉树最大深度。 代码 class So 阅读全文
posted @ 2023-03-29 21:00 黄三七 阅读(23) 评论(0) 推荐(0)
摘要:1、层序遍历(广度优先遍历) 借助 队列 实现 队列 先进先出,符合一层一层遍历的逻辑 栈 先进后出,适合模拟深度优先遍历(递归) leetcode102 二叉树的层序遍历 迭代法(使用队列)【模板题】 class Solution { public List<List<Integer>> leve 阅读全文
posted @ 2023-03-28 11:38 黄三七 阅读(46) 评论(0) 推荐(0)
摘要:1、理论知识 二叉树的种类 满二叉树: 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 二叉树的所有叶子节点都在最后一层,并且节点总数为2^n-1,n为层数【从1 开始】 完全二叉树: 二叉树的所有叶子节点都在最后一层或者倒数第二层,且最后一层的叶 阅读全文
posted @ 2023-03-27 21:08 黄三七 阅读(104) 评论(0) 推荐(0)
摘要:1、leetcode84 柱状图中的最大矩形 思路【宫水三叶题解】 最终矩形的高度必然取自某个heights[i],因此我们可以枚举最终矩形的高度来做。 问题转换为当使用某个heights[i]作为矩形高度时,该矩形所能取得的最大宽度为多少。 假设我们能够预处理出 l 和 r 数组 l[i]代表位置 阅读全文
posted @ 2023-03-15 10:49 黄三七 阅读(24) 评论(0) 推荐(0)
摘要:1、leetcode503 下一个更大元素Ⅱ class Solution { public int[] nextGreaterElements(int[] nums) { int[] res = new int[nums.length]; Arrays.fill(res, -1); Deque<I 阅读全文
posted @ 2023-03-15 10:49 黄三七 阅读(25) 评论(0) 推荐(0)
摘要:1、单调栈 单调栈的使用场景 通常是一维数组,要寻找任意一个元素 的右边或左边 第一个比自己大或者小的元素的位置 单调栈的时间复杂度 O(n) 单调栈的原理 单调栈的本质:空间换时间 因为在遍历过程中需要一个栈来记录右边第一个比当前元素高的元素 优点是整个数组只需要遍历一次, 时间复杂度:O(n) 阅读全文
posted @ 2023-03-13 20:59 黄三七 阅读(35) 评论(0) 推荐(0)
摘要:1、leetcode647 回文子串 动规五部曲 是否是回文子串,如果是dp[i] [j]为true,否则为false 递推公式 s[i] == s[j] 情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串 情况二:下标i 与 j相差为1,例如aa,也是回文子串 情况三:下标:i 与 j相 阅读全文
posted @ 2023-03-12 19:59 黄三七 阅读(23) 评论(0) 推荐(0)
摘要:1、leetcode583 两个字符串的删除操作 动归五步法 dp[i] [j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。 递推公式 word1[i-1] == word2[j-1] dp[i] [j] = dp[i-1] [j- 阅读全文
posted @ 2023-03-12 00:28 黄三七 阅读(16) 评论(0) 推荐(0)
摘要:1、leetcode392 判断子序列 动规五部曲 dp[i] [j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i] [j]。 递推公式 if(s.charAt(i-1) == t.charAt(j-1)) { dp[i][j] = dp[i-1][ 阅读全文
posted @ 2023-03-09 17:08 黄三七 阅读(25) 评论(0) 推荐(0)
摘要:1、leetcode1143 最长公共子序列 动规五部曲 dp[i] [j] = 长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列的长度 下标定义到i-1与j-1 ==》为了简化dp数组第一行和第一列的初始化逻辑 递推公式 主要就是两大情况: 阅读全文
posted @ 2023-03-08 10:52 黄三七 阅读(22) 评论(0) 推荐(0)
摘要:1、leetcode300 最长递增子序列 动规五部曲 dp[i] : 以nums[i]结尾的数组的递增子序列的最大长度 做递增比较的时候,如果比较 nums[j] 和 nums[i] 的大小,那么两个递增子序列一定分别以nums[j]为结尾 和 nums[i]为结尾, 否则这个比较就没有意义了 递 阅读全文
posted @ 2023-03-07 21:00 黄三七 阅读(20) 评论(0) 推荐(0)
摘要:1、leetcode491 递增子序列 回溯三部曲 递归参数 本题求子序列,很明显一个元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置。 List<Integer> path = new LinkedList<>(); List<List<Integer>> res = ne 阅读全文
posted @ 2023-03-07 21:00 黄三七 阅读(39) 评论(0) 推荐(0)
摘要:1、leetcode309 最佳买卖股票时机含冷冻期 动规五部曲 dp[i] [j] : 第i天状态j时,所能获得的最大金额 持有股票 j=0 之前就处于买入状态,之后无操作 dp[i] [0] = dp[i-1] [0] 当天买入 (之前处于不持有股票状态,且要经历完一天冷冻期 ==》j=1,j= 阅读全文
posted @ 2023-03-06 10:47 黄三七 阅读(23) 评论(0) 推荐(0)
摘要:1、leetcode123 买卖股票的最佳时机Ⅲ 动规五步法 dp[i] [j] : 在第i天,j状态下能获得的最大利润 j = 0 : 第一次持有 j = 1:第一次不持有 j = 2:第二次持有 j = 3:第二次不持有 递归公式 dp[i] [0] = max( dp[i-1] [0] , - 阅读全文
posted @ 2023-03-04 21:52 黄三七 阅读(26) 评论(0) 推荐(0)
摘要:1、leetcode121 买卖股票的最佳时机 暴力破解,超时 class Solution { public int maxProfit(int[] prices) { int res = 0; for(int i=0; i<prices.length; i++) { for(int j=i+1; 阅读全文
posted @ 2023-03-03 21:21 黄三七 阅读(37) 评论(0) 推荐(0)
摘要:1、leetcode198 打家劫舍 动规五步法 dp[i]:偷盗房屋序号为i的房屋时,能偷窃到的最高金额 递归公式 偷第i间房:dp[i] = dp[i-2] + nums[i] 不偷第i间房:dp[i] = dp[i-1] dp[i] = max(dp[i-2] + nums[i], dp[i- 阅读全文
posted @ 2023-03-02 16:24 黄三七 阅读(19) 评论(0) 推荐(0)
摘要:1、leetcode139 单词拆分 问题分析==》完全背包问题 背包:字符串s 物品:字典中的字符串(每个字符串可重复使用) 动规五步法 dp[i] :字符串长度为i,若dp[i]为true,则表示可以将该字符串拆分为一个或多个在字典中出现的单词。 递归公式 if dp[j]==true && s 阅读全文
posted @ 2023-03-01 21:26 黄三七 阅读(28) 评论(0) 推荐(0)