力扣爆刷第115天之CodeTop100五连刷61-65

2024-04-09 08:36

本文主要是介绍力扣爆刷第115天之CodeTop100五连刷61-65,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

力扣爆刷第115天之CodeTop100五连刷61-65

文章目录

      • 力扣爆刷第115天之CodeTop100五连刷61-65
      • 一、32. 最长有效括号
      • 二、129. 求根节点到叶节点数字之和
      • 三、104. 二叉树的最大深度
      • 四、101. 对称二叉树
      • 五、110. 平衡二叉树

一、32. 最长有效括号

题目链接:https://leetcode.cn/problems/longest-valid-parentheses/description/
思路:使用栈,栈内存索引,遇到左括号,入栈,遇到右括号出栈,故栈底要初始化一个值,来满足计算括号长度,举例(),可以压入-1,左括号再压入0,右括号来了,0出栈,i= 1,减去栈顶的-1,长度为2,初始化验证完毕。每次出栈更新max,另外注意边界条件。

class Solution {public int longestValidParentheses(String s) {LinkedList<Integer> stack = new LinkedList<>();int max = 0;stack.push(-1);for(int i = 0; i < s.length(); i++) {if(s.charAt(i) == '(') {stack.push(i);}else{stack.pop();if(stack.isEmpty()) {stack.push(i);}else{max = Math.max(max, i - stack.peek());}}}return max;}
}

二、129. 求根节点到叶节点数字之和

题目链接:https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/
思路:使用回溯的思想,前序遍历,收集数字,抵达叶子节点即到达回溯的最深层,计算加和。然后是左右子树遍历,然后是回溯返回。


class Solution {int sum = 0;StringBuilder builder = new StringBuilder();public int sumNumbers(TreeNode root) {traverse(root);return sum;}void traverse(TreeNode root) {if(root == null) return;builder.append(root.val);if(root.left == null && root.right == null) {sum += Integer.valueOf(builder.toString());}traverse(root.left);traverse(root.right);builder.deleteCharAt(builder.length()-1);}}

三、104. 二叉树的最大深度

题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
思路:后序遍历,返回左右子树的最大值加1,即可。

class Solution {public int maxDepth(TreeNode root) {if(root == null) return 0;int left = maxDepth(root.left);int right = maxDepth(root.right);return Math.max(left, right) + 1;}
}

四、101. 对称二叉树

题目链接:https://leetcode.cn/problems/symmetric-tree/description/
思路:就是从根节点开始把一颗二叉树分成两个二叉树,然后前序遍历,递归比较即可。

class Solution {public boolean isSymmetric(TreeNode root) {return traverse(root.left, root.right);}boolean traverse(TreeNode t1, TreeNode t2) {if(t1 == null && t2 == null) return true;if(t1 != null && t2 != null) {if(t1.val != t2.val) return false;boolean left = traverse(t1.left, t2.right);boolean right = traverse(t1.right, t2.left);return left && right;}return false;}
}

五、110. 平衡二叉树

题目链接:https://leetcode.cn/problems/balanced-binary-tree/description/
思路:判断是否是二叉树,关键在于每个节点的左右子树高度差不能大于1,所以一直后序遍历求深度,在其过程中判断是否非法,非法记录全局变量,即可,另外可以早停利用全局变量。

class Solution {boolean flag = true;public boolean isBalanced(TreeNode root) {traverse(root);return flag;}int traverse(TreeNode root) {if(root == null || !flag) return 0;int left = traverse(root.left);int right = traverse(root.right);if(Math.abs(left - right) > 1) flag = false;return Math.max(left, right) + 1;}
}

这篇关于力扣爆刷第115天之CodeTop100五连刷61-65的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887668

相关文章

力扣SQL50 每位经理的下属员工数量 join

Problem: 1731. 每位经理的下属员工数量 👨‍🏫 参考题解 Code select m.Employee_id, m.name,count(*) reports_count,round(avg(e.age),0) average_agefrom Employees ejoin Employees mon e.reports_to = m.Employee_id

力扣SQL50 游戏玩法分析 IV 子查询

Problem: 550. 游戏玩法分析 IV 👨‍🏫 参考题解 这个SQL查询的目的是计算每个玩家在登录后的第二天参与活动的比例。查询使用了子查询和左连接来实现这一目的。下面是查询的详细解释,包括每个部分的作用和注释: -- 计算每个玩家登录后第二天参与活动的比例select round(avg(a.event_date is not null), 2) as fractio

力扣-2663

题目 如果一个字符串满足以下条件,则称其为 美丽字符串 : 它由英语小写字母表的前 k 个字母组成。它不包含任何长度为 2 或更长的回文子字符串。 给你一个长度为 n 的美丽字符串 s 和一个正整数 k 。 请你找出并返回一个长度为 n 的美丽字符串,该字符串还满足:在字典序大于 s 的所有美丽字符串中字典序最小。如果不存在这样的字符串,则返回一个空字符串。 对于长度相同的两个字符串 a

力扣SQL50 超过5名学生的课

Problem: 596. 超过5名学生的课 Code select classfrom coursesgroup by classhaving count(distinct student) >= 5;

力扣刷题 杨辉三角(使用c++ vector解法)

杨辉三角 题目描述示例1示例2提示:代码 题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例2 输入: numRows = 1

力扣SQL50 求关注者的数量 分组计数

Problem: 1729. 求关注者的数量 Code select user_id, count(1) followers_countfrom Followers group by user_idorder by user_id;

力扣SQL50 销售分析III having + 条件计数

Problem: 1084. 销售分析III 👨‍🏫 参考题解 Code select s.product_id,p.product_namefrom sales s left join product pon s.product_id = p.product_idgroup by product_idhaving count(if(sale_date between

每日一题——Python代码实现力扣1. 两数之和(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 菜鸡写法 代码分析 时间复杂度分析 空间复杂度分析 改进建议 我要更强 方法1: 使用哈希表(字典) 方法2: 排序和双指针 方法3: 使用集合(仅适用于特殊情况) 哲学和编程思想

【教学类65-02】20240622秘密花园涂色书02(通义万相)(A4横版2张,一大 68张纸136份)

背景需求 【教学类65-01】20240622秘密花园涂色书01(通义万相)(A4横版2张,一大3小 38张纸76份)-CSDN博客文章浏览阅读118次。【教学类65-01】20240622秘密花园涂色书01(通义万相)(A4横版2张,一大3小 38张纸76份)https://blog.csdn.net/reasonsummer/article/details/139899797 以上

194.回溯算法:组合总和||(力扣)

代码解决 class Solution {public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtracing(vector<int>& candidates, int target, int flag, int index, vector<bool>&