本文主要是介绍LeetCode 1907, 392, 104,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1907. 按分类统计薪水
- 题目链接
- 表
- 要求
- 知识点
- 思路
- 代码
- 392. 判断子序列
- 题目链接
- 标签
- 思路
- 代码
- 104. 二叉树的最大深度
- 题目链接
- 标签
- 递归
- 思路
- 代码
- 迭代
- 思路
- 代码
1907. 按分类统计薪水
题目链接
1907. 按分类统计薪水
表
- 表
Accounts
的字段为account_id
和income
。
要求
- 查询每个工资类别的银行账户数量。 工资类别如下:
- “Low Salary”:所有工资 严格低于 20000 美元。
- “Average Salary”: 包含 范围内的所有工资 [$20000, $50000] 。
- “High Salary”:所有工资 严格大于 50000 美元。
- 结果表 必须 包含所有三个类别。如果某个类别中没有帐户,则报告 0 。
- 按 任意顺序 返回结果表。
知识点
count()
:统计个数的函数。if()
:条件判断函数,如果满足条件,返回第二个参数,否则返回第三个参数。union
:合并两个查询结果。
思路
本题的思路很简单,按照要求求出各个工资水平的人的个数,然后用union
将其 联合 起来。
代码
select'Low Salary' category,count(if(income < 20000, 1, null)) accounts_count
fromAccounts
union
select'Average Salary' category,count(if(20000 <= income and income <= 50000, 1, null)) accounts_count
fromAccounts
union
select'High Salary' category,count(if(income > 50000, 1, null)) accounts_count
fromAccounts
392. 判断子序列
题目链接
392. 判断子序列
标签
双指针 字符串 动态规划
思路
本题只需要遍历一遍字符串t
,然后匹配字符串s
中的所有字符即可。从s
的第一个字符开始,每次匹配成功s
中到一个字符,就匹配s
的下一个字符。
代码
class Solution {public boolean isSubsequence(String s, String t) {int i = 0; // i是字符串s的索引char[] sC = s.toCharArray();char[] tC = t.toCharArray();for (int j = 0; j < tC.length && i < sC.length; j++) { // j是字符串t的索引if (sC[i] == tC[j]) { // 如果匹配成功i++; // 则匹配s的下一个字符}}return i == sC.length;}
}
104. 二叉树的最大深度
题目链接
104. 二叉树的最大深度
标签
树 深度优先搜索 广度优先搜索 二叉树
递归
思路
要想获取一个节点的最大深度,得先求出它的左子树的深度leftDepth
和右子树的深度rightDepth
,然后取较大值 + 1
作为本节点的深度Math.max(leftDepth, rightDepth) + 1
。为什么要加一,因为本节点也算一层深度。如果发现本节点为null
,那么本节点的深度为0
。
代码
class Solution {public int maxDepth(TreeNode curr) {if (curr == null) { // 如果本节点为nullreturn 0; // 则返回深度为0}int leftDepth = maxDepth(curr.left); // 获取左子树的深度int rightDepth = maxDepth(curr.right); // 获取右子树的深度return Math.max(leftDepth, rightDepth) + 1; // 取 较大值+1 作为本节点的深度}
}
迭代
思路
可以将 求二叉树的最大深度 看作 对二叉树的层序遍历(层序遍历就是一层一层地遍历,每层节点距离根节点的距离是一样的),总共能遍历多少层,最大深度就是多少。
层序遍历 是一种 广度优先搜索,所以可以使用 队列。共有两层循环,外层循环就是对二叉树一层一层地循环,内层循环就是将本层的节点按从左到右的顺序(因为本题只是求深度,所以与顺序无关,可以不在乎顺序)遍历,遍历时再给队列添加本层节点的两个子节点(要求两个子节点不为null
,如果为null
,则最后求出来的深度比正确结果大1),内层循环完毕后将深度加一,直到队列没有元素。
代码
class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;}int depth = 0;Queue<TreeNode> queue = new LinkedList<>(); // 队列存储了各层的所有元素queue.offer(root); // 先放入根节点while (!queue.isEmpty()) {int size = queue.size(); // 本层节点的个数for (int i = 0; i < size; i++) {TreeNode poll = queue.poll();if (poll.left != null) { // 如果左子节点不为空queue.offer(poll.left); // 则放入左子节点}if (poll.right != null) { // 如果右子节点不为空queue.offer(poll.right); // 则放入右子节点}}depth++; // 深度+1}return depth;}
}
这篇关于LeetCode 1907, 392, 104的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!