310. 最小高度树 / 1667. 修复表中的名字 / 1484. 按日期分组销售产品 / 1527. 患某种疾病的患者

编程入门 行业动态 更新时间:2024-10-24 08:32:20

310. <a href=https://www.elefans.com/category/jswz/34/1769671.html style=最小高度树 / 1667. 修复表中的名字 / 1484. 按日期分组销售产品 / 1527. 患某种疾病的患者"/>

310. 最小高度树 / 1667. 修复表中的名字 / 1484. 按日期分组销售产品 / 1527. 患某种疾病的患者

310. 最小高度树【中等题】【每日一题】

思路:【看评论区~】

这题不会写的原因,我觉得至少有一半得归因于 看不懂题目在说什么~

那么我先写一下,我看完题解后理解的 题目在问什么:

题目给了你一个无向图,图上有很多节点,让你找出这些节点中,距离叶子节点距离最小的那些节点。

那么如何解决呢?
可以将所有的叶子节点找出来,将它们添加到队列里,使用while循环对队列进行处理,去掉所有的叶子节点,处理过程中,对这些叶子节点的相邻节点进行筛选,如果在下一轮筛选过程中有可能成为叶子节点,就将其添加到队列中。当处理完所有的叶子节点后,剩下的节点就是距离叶子节点距离最小的那些节点。

具体代码实现见代码注释,本文主要参考自力扣评论区小鑫大佬的题解

代码:

class Solution {public List<Integer> findMinHeightTrees(int n, int[][] edges) {List<Integer> ans = new ArrayList<>();//如果只有一个节点,那么它就是最小高度树if (n == 1){ans.add(0);return ans;}//建立各个节点的度表int[] parent = new int[n];//建图List<Integer>[] adj = new List[n];for (int i = 0; i < n; i++) {adj[i] = new ArrayList<>();}for (int[] edge : edges) {adj[edge[0]].add(edge[1]);adj[edge[1]].add(edge[0]);parent[edge[0]]++;parent[edge[1]]++;}//建立队列Queue<Integer> queue = new LinkedList<>();//把所有度为1的节点,也就是叶子节点加入队列for (int i = 0; i < n; i++) {if (parent[i] == 1){queue.offer(i);}}//当queue不为空时while (!queue.isEmpty()){ans = new ArrayList<>();//保存结果集合int size = queue.size();//记录每一层的节点数量for (int i = 0; i < size; i++) {int cur = queue.poll();//弹出队列中一个叶子节点ans.add(cur);//把当前节点加入结果集List<Integer> neighbors = adj[cur];//拿到当前节点的相邻节点//剪掉当前节点for (Integer neighbor : neighbors) {parent[neighbor]--;//其相邻节点的度也会减1if (parent[neighbor] == 1){queue.offer(neighbor);//如果相邻节点因此变为了叶子节点,那么就将其添加入队列中}}}}return ans;}
}

1667. 修复表中的名字【简单题】

代码:

# Write your MySQL query statement below
select user_id , concat(upper(left(name,1)),lower(substring(name,2))) as `name`
from Users
order by user_id;

1484. 按日期分组销售产品【简单题】

代码:

# Write your MySQL query statement below
select sell_date,
count(distinct product) as `num_sold`,# 统计产品的数量
# 将产品按照当前分组进行拼接,默认排序从小到大,即字典序,默认拼接符为 , 
group_concat(distinct product) as `products` 
from Activities
group by sell_date # 按sell_date分组
order by sell_date; # 结果集按sell_date从小到大排序

1527. 患某种疾病的患者【简单题】

代码:

# Write your MySQL query statement below
select *
from Patients
where conditions rlike '^DIAB1|.*\\sDIAB1';# rlike表示判断数据是否与正则表达式相匹配

更多推荐

310. 最小高度树 / 1667. 修复表中的名字 / 1484. 按日期分组销售产品 / 1527. 患某种疾病的患者

本文发布于:2024-02-06 18:37:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751049.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最小   患者   高度   名字   疾病

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!