自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 力扣Hot100--106.对称二叉树

明确概念:一棵树是对称的,当且仅当它的左子树和右子树是镜像对称的​​,所以判断是否是对称二叉树,其实就是判断根节点的左右孩子是否是翻转对称。要求:给你一个二叉树的根节点 root , 检查它是否轴对称。1、​​比较外侧​​:左子树的左节点 vs 右子树的右节点。2、​​比较内侧​​:左子树的右节点 vs 右子树的左节点。​​3、当前节点值必须相等​。

2025-10-15 16:51:39 188

原创 力扣Hot100--226.翻转二叉树

​​2、交换该节点的左右子树​​:node.left, node.right = node.right, node.left。要求:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。1、从队列中取出当前节点(使用 popleft()确保先进先出)3、如果左子树不为空,将其加入队列(等待后续处理)4、如果右子树不为空,将其加入队列(等待后续处理)

2025-10-15 15:00:13 227

原创 力扣Hot100--104.二叉树的最大深度

1、二叉树的 高度 是指任意节点到叶子节点的距离(从下到上,用后序遍历)2、二叉树的 深度 是指任意节点到根节点的距离(从上到下,用前序遍历)二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。3、后序遍历得到的 根节点的高度 就是该二叉树的 最大深度。要求:给定一个二叉树 root ,返回其最大深度。一层一层找下去,比较好理解。

2025-10-14 17:46:29 300

原创 力扣Hot100--102.二叉树的层序遍历

【代码】力扣Hot100--102.二叉树的层序遍历。

2025-10-14 15:49:17 202

原创 力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历

【代码】力扣Hot100--94.二叉树的中序遍历。

2025-10-13 15:21:32 254

原创 力扣Hot100--21.合并两个有序链表

1、每次比较两个链表当前节点的值,将较小值接入结果链表。3、当一个链表遍历完后,直接将另一个链表的剩余部分接入。2、将已接入节点的链表指针后移一位。

2025-09-30 18:00:48 193

原创 力扣Hot100--141.环形链表

1、在遍历每个节点时,先检查它是否在集合中,然后再将其加入集合;记录所有访问过的节点,检查是否重复访问。空间复杂度O(1),时间复杂度O(n)2、如果遍历到链表末尾,说明无环。空间、时间复杂度都为O(n)也是快慢指针法,只是起点一样。

2025-09-30 17:53:06 292

原创 力扣Hot100--234.回文链表

判断的是​​内层递归的比较结果​​。在python中 mode_set[::-1] 表示将列表 vals反转了,所以也可以通过 mode_set==mode_set[::-1] 来判断是否是一个​​回文列表​​。这里要注意,那mode_set 就要保存节点的值,并非节点本身!空间复杂度​​:O(n),主要用于递归调用栈。时间复杂度​​:O(n),其中 n 是链表的长度。​​空间复杂度​​:O(n),需要额外空间存储所有节点值。时间复杂度​​:O(n),遍历链表一次,比较列表一次。空间复杂度是 O(1)

2025-09-22 18:35:48 516 1

原创 力扣Hot100--206.反转链表

反转指针,让 curr(节点1) 的 next指向 prev(None)。反转指针,让 curr(节点2) 的 next指向 prev(节点1)。此时链表状态: (节点3) -> (节点2) -> None,节点1还未被处理,仍指向 节点2。此时链表状态: (节点3) -> (节点2) -> (节点1) -> None。将 curr指针移动到之前保存的下一个节点,即节点2,准备处理下一个节点。保存 curr(节点1) 的下一个节点 (节点2),防止断链。保存 curr(节点2) 的下一个节点 (节点3)。

2025-09-19 17:42:29 1653

原创 【Leetcode】高频SQL基础题--185.部门工资前三高的所有员工

生成一个RankedEmployees临时表;DENSE_RANK()会处理并列情况(2、然后对临时表过滤出排名前三的员工。1、使用内连接将两表关联,使用。

2025-09-17 15:44:00 236

原创 【Leetcode】高频SQL基础题--585.2016年的投资

1、上述方法,每个子查询都会执行一次表扫描,然后主查询再执行一次扫描,总体效率较低。1、通过两个子查询分别处理tiv_2015重复性和城市唯一性条件。​​(如COUNT() OVER)来优化查询。2、然后用WHERE过滤出来。2、再次记录一下窗口函数。

2025-09-17 11:49:24 365

原创 【Leetcode】高频SQL基础题--602.好友申请II:谁有最多的好友

首先明确好友关系是双向的,一个人可以是请求者(发送请求并被接受),也可以是接受者(接受别人的请求)。因此,需要统计每个用户在 requester_id和 accepter_id列中出现的总次数,这个次数就是该用户的好友数量。两个子查询 requester_id和 accepter_id两列的数据,生成一个包含所有用户ID的临时表 combined_ids。由于(requester_id, accepter_id) 是这张表的主键(具有唯一值的列的组合),所以一个好友关系不可能被重复计算。

2025-09-16 18:30:36 288

原创 【Leetcode】高频SQL基础题--1321.餐馆营业额变化增长

即 生成一个临时表 windowed,包含三列:visited_on(日期)、total_amount(7 天窗口内的总消费)、day_count(窗口内的实际天数)。,包含两列:visited_on(日期)和 daily_amount(该日总消费)(即 day_count = 7),计算平均值并格式化输出。3、最后在主查询中从 windowed中过滤日期,只。4、按照按日期升序排序。

2025-09-16 18:15:35 228

原创 【Leetcode】高频SQL基础题--176.第二高的薪水

3、主查询 再从剩余的记录中找出最大值,这个值就是第二高的薪水。如果没有任何记录剩余(即所有薪水相同或只有一条记录),MAX()聚合函数会自动返回 NULL。SELECT MAX(salary) FROM Employee 找出 Employee 表中的最高薪水。2、然后用WHERE 子句进行过滤 用于排除所有等于最高薪水的记录,只保留那些薪水低于最高薪水的记录。

2025-09-16 14:54:19 154

原创 【Leetcode】高频SQL基础题--1327.查找拥有有效邮箱的用户

(‘c’),确保了邮箱域名 @leetcode.com的​​精确匹配​​(要求小写)1、用正则表达式,使用。

2025-09-11 18:30:52 287

原创 【Leetcode】高频SQL基础题--1327.列出指定时间段内所有的下单产品

(也就是 需要显式地在 GROUP BY中列出 product_name ,虽然在实际业务逻辑中,product_name确实由 product_id唯一决定(函数依赖),但有些数据库系统无法自动识别这种函数依赖关系。1、当时有个疑问,为什么 GROUP BY p.product_id, p.product_name,不可以只按照 p.product_id 进行分组吗?由于在标准的SQL语法中,SELECT语句中出现的所有​​非聚合列​​(没有使用SUM、COUNT等函数的列)

2025-09-11 18:01:57 254

原创 【Leetcode】高频SQL基础题--1484.按日期分组销售产品

• COUNT(DISTINCT product): 计算每个日期下​​不同​​产品的数量。​​将产品名称连接成字符串 (GROUP_CONCAT(…) AS products)​​。使用​​分组聚合​​,并为 products列使用​​专用于字符串聚合的聚合函数​​。• ORDER BY product: 按照产品名的词典顺序进行排序。是 MySQL 中专门用于将分组内的多行字符串值合并为一行的函数。计算出所需的两项结果(数量和不重复的产品列表)​​。来去重,避免同一天售卖的相同产品重复出现在字符串中。

2025-09-11 17:00:38 236

原创 【Leetcode】高频SQL基础题--196.删除重复的电子邮箱

1、数据库会先执行最内层的查询 SELECT MIN(id) AS min_id FROM Person GROUP BY email,得到一个包含所有需要保留的最小ID的结果集。2、然后将这个结果集​​物化​​为一个临时的、只在当前查询中存在的派生表,我们给它起名为 temp_table。1、使用自连接,对于每个电子邮件,如果存在更小的id(p1.id > p2.id),则删除当前id(p1)。外层DELETE语句不再直接查询原始表,而是查询这个临时出来的、结果集固定的“表”。

2025-09-11 16:07:29 373

原创 【Leetcode】高频SQL基础题--1527.患某种疾病的患者

1、存在两种情况:以“DIAB1”开头、包含“ DIAB1”的字符串(即代码中间或末尾有以“DIAB1”开头的代码,注意有空格)。

2025-09-11 13:55:12 285

原创 【Leetcode】高频SQL基础题--1667.修复表中的名字

1、将首字母变成大写,其余为小写,所以 left(name, 1) 得到 name 值的首字母、right(name, length(name) - 1)) 得到 name 值首字母余下的值。• RIGHT(str,length)从右开始截取字符串,length 是截取的长度。• UPPER(str)和 LOWER(str)分别用于将字符串转换为全大写或全小写。• LEFT(str,length)从左开始截取字符串,length 是截取的长度。3、最后根据 user_id 进行。

2025-09-11 10:16:09 257

原创 【Leetcode】高频SQL基础题--1341.电影评分

WHERE子句筛选出2020年2月1日至2020年2月29日之间的评分记录(注意条件是< ‘2020-03-01’,这是精准获取2月全月数据的推荐写法)。• 使用GROUP BY MovieRating.movie_id按电影ID分组,计算每部电影的平均评分(AVG(MovieRating.rating))。—​​当多个用户的评论次数相同时,按用户名升序排列,确保结果 deterministic(确定唯一用户)。2、查找2020年2月平均评分最高的电影​​(如果平均分相同,则按电影名字典序取第一个)。

2025-09-09 18:22:45 440

原创 【Leetcode】高频SQL基础题--626.换座位

1、对 id 进行判断:如果是偶数,那就和上面的值进行交换;如果是奇数并且不是最后一个数,那就和下面的值进行交换;最后就剩下是奇数并且是最后一个数,就不进行交换操作;LEAD(num, 1) OVER (ORDER BY id)会按id排序后,返回当前行num列的后一个值。2、CASE语句:可以在 WHEN子句中使用多个条件进行组合判断,并且多个WHEN子句要是不满足才走ELSE。LAG(num, 1) OVER (ORDER BY id)会按id排序后,返回当前行num列的前一个值。

2025-09-09 16:15:00 248

原创 【Leetcode】高频SQL基础题--1978.上级经理已离职的公司员工

让 e1.manager_id = e2.employee_id 将左表manager_id 与 employee_id 对应,就可以知道其上级经理是否是在职员工,不是在职员工的话 e2.employee_id is null;2、not in检查经理是否离职,如果某个员工的manager_id不在子查询返回的列表中,则说明该经理已离职(即不在当前员工表中)。• 如果manager_id为null,表示没有上级经理,自然不符合“上级经理已离职”的条件,会被过滤掉。2、上级经理已离职–>用。

2025-09-08 14:36:34 224

原创 【Leetcode】高频SQL基础题--1907.按分类统计薪水

1、​​通过三个独立的 SELECT语句,分别计算低收入(income < 20000)、中等收入(income BETWEEN 20000 AND 50000)和高收入(income > 50000)的账户数量。1、UNION运算符是合并多个查询结果的有效工具,默认会去除重复行。将这三个独立的查询结果​​垂直堆叠​​在一起,形成最终的三行结果(每行一个类别及其对应的数量)。2、三个SELECT 语句,也可以用WHERE进行条件过滤,然后再用COUNT 来统计数量。:使用UNION 和条件聚合。

2025-09-08 11:45:26 194

原创 【Leetcode】高频SQL基础题--1204.最后一个能进入巴士的人

要求:按上车顺序(turn)计算累计重量(Running Total),然后找出累计重量不超过 1000 千克的最后一个人​​。按上车顺序(turn)计算累计重量(Running Total),然后找出累计重量不超过 1000 千克的最后一个人​​。1、通过窗口函数​​按照 turn从小到大的顺序,逐行计算体重的累计和​​。该子查询会生成一个包含每个人姓名、顺序以及​​到此人为止的总重量​​的临时结果集t。2、从临时结果集t中,筛选出累计重量没有超过巴士负载限制(1000千克)的记录。

2025-09-08 10:54:16 261

原创 【Leetcode】高频SQL基础题--1164.指定日期的产品价格

3、使用 左连接left join 将两个查询联合。使用ifnull(p2.new_price, 10)如果产品没有价格,说明没有修改过,设置为 10,如果有价格,设置为最新的价格。找到 2019-08-16 前所有有改动的产品及其最新价格,如果没有更新那就是原始价格。2、子查询:再找到所有 2019-08-16 前有修改的产品和他们最新的价格;1、子查询:先找到所有的产品;

2025-09-07 15:13:56 221

原创 【Leetcode】高频SQL基础题--180.连续出现的数字

(num, 1) OVER (ORDER BY id)获取当前行的后一个num值。ORDER BY id确保按id顺序处理行。来获取当前行的前一个和后一个num值,然后检查这三个值是否相同。如果相同,则表示当前行是连续三个相同数字的中间行。(num, 1) OVER (ORDER BY id)获取当前行的前一个num值,使用。,确保每个数字只输出一次。不熟悉窗口函数,难!

2025-09-05 18:16:17 221

原创 【Leetcode】高频SQL基础题--610.判断三角形

1、三角形​​任意两边之和大于第三边​​,​​任意两边之差小于第三边​​,所以用到。

2025-09-05 15:21:42 175

原创 【Leetcode】高频SQL基础题--1789.员工的直属部门

• 使用子查询找出所有部门数量为1的员工(HAVING COUNT(department_id) = 1),然后通过 employee_id IN条件将这些员工的记录也包括进来,即使它们的 primary_flag是 ‘N’。​​• 直接筛选 primary_flag = 'Y’的记录​​:这部分确保所有明确标记为直属部门的记录被选中。还有用窗口函数、UNION的解法。

2025-09-05 14:23:26 264

原创 【Leetcode】高频SQL基础题--1731.每位经理的下属员工数量

我想过加判断:使用 LEFT JOIN来匹配员工和他们的下属,然后通过过滤条件(reports_count = 0, average_age IS NULL)来移除那些不是经理的员工。1、一开始我选择用左连接,通过employee_id和reports_to匹配,然后但是左连接会保留左表的所有记录,即所有经理,即使用户的代码中可能没有下属的员工也会被包括进来。• COUNT(E2.employee_id):统计该经理名下有多少条汇报记录,即下属人数 (reports_count)。

2025-09-05 11:16:33 289

原创 【Leetcode】高频SQL基础题--1045.买下所有产品的客户

​​ (SELECT COUNT(*) FROM Product) 计算Product表中的总产品数量。3、COUNT(DISTINCT product_key)​​ 计算每个客户购买的唯一产品数量(2、GROUP BY customer_id​​ 按客户。过滤出那些购买唯一产品数量等于总产品数量的客户。,统计每个客户的购买记录。

2025-09-04 16:56:49 267

原创 【Leetcode】高频SQL基础题--619.只出现一次的最大数字

1、直接在 GROUP BY 后使用 HAVING 过滤,然后对每个分组应用 MAX。但 MAX 在这里实际上只作用于每个分组内的单个数字(因为每个分组只有一个 num 值),所以 MAX 是多余的,2、更关键的是,当没有分组时,整个查询返回空。而题目明确要求在这种情况下返回 null。如果子查询为空(即没有单一数字),MAX 函数会自然返回 null。2、然后在外层应用 MAX 函数。1、使用子查询先过滤出单一数字;

2025-09-04 11:06:20 166

原创 【Leetcode】高频SQL基础题--1729.求关注者的数量

3、最后按照 user_id 排序。2、用COUNT 统计关注者数量。1、按照user_id 分组。

2025-09-04 10:32:32 241

原创 【Leetcode】高频SQL基础题--596. 超过 5 名学生的课

2、用 HAVING 过滤学生数量大于等于5个的班级。1、按照 班级 分组。

2025-09-04 10:18:58 288

原创 【Leetcode】高频SQL基础题--1084.销售分析III

来过滤每个产品的最早销售日期(MIN(s.sale_date))不早于 ‘2019-01-01’,且最晚销售日期(MAX(s.sale_date))不晚于 ‘2019-03-31’。这确保了所有销售都在春季范围内。1、用内连接来保留有销售记录的产品,左连接的话,就包括所有产品了,而题目指出产品必须有销售记录;• 至少有一次销售在2019年春季(2019-01-01 至 2019-03-31)内。• 没有任何销售在2019年春季之外(即所有销售都在春季内)。来确保只考虑有销售记录的产品。

2025-09-03 15:56:21 220

原创 【Leetcode】高频SQL基础题--1141.查询近30天活跃用户数

1、先用 HWHERE 过滤,只处理2019-06-28至2019-07-27之间的记录;3、最后使用COUNT(DISTINCT user_id)统计每日唯一用户数。1、如何表示时间范围:2019-06-28至2019-07-27。2、然后按照 activity_date 进行分组;

2025-09-03 14:19:55 219

原创 【Leetcode】高频SQL基础题--2356.每位教授所教授的科目种类

2、然后在每个老师分组内,统计不同的科目ID数量​​:COUNT(DISTINCT subject_id)1、按照 teacher_id 进行分组,这样每组包含该老师的所有授课记录;DISTINCT—>去重,用于返回唯一不同的值。确保同一科目只计数一次。

2025-09-03 10:37:24 214

原创 【Leetcode】高频SQL基础题--550.游戏玩法分析IV

2、第二天登录 (DATEDIFF(A2.event_date, A1.event_date) = 1)分子:COUNT(DISTINCT A2.player_id) - 有第二天登录的玩家数量。分母:COUNT(DISTINCT A1.player_id) - 总玩家数量。1、相同玩家 (A1.player_id = A2.player_id)1、​获取每个玩家的首次登录日期(子查询 A1)​​。的玩家,A2会有对应记录;使用左连接确保保留所有玩家的首次登录记录。2、左连接查找第二天登录的记录。

2025-09-02 18:25:49 486

原创 【Leetcode】高频SQL基础题--1174.即时食物配送2

语句检查每个首次订单是否是即时订单:如果 order_date 等于 customer_pref_delivery_date,则返回1,否则返回0。(order_date) 找到每个顾客的首次订单日期。结果集包含每个 customer_id 和对应的 first_order_date。4.结果返回一个名为 immediate_percentage 的列,表示即时订单在首次订单中的百分比。(*) 或者 COUNT(customer_id)计算总首次订单数(即顾客数)。1、先用子查询​​,使用。

2025-09-02 15:51:05 334

原创 【Leetcode】高频SQL基础题--1193.每月交易

1、DATE_FORMAT(date, format):用于以不同的格式显示日期/时间数据。date 参数是合法的日期,format 规定日期/时间的输出格式。----> 年月 %Y-%m 输出。函数将trans_date转换为“年-月”格式(如’2018-12’),以便按月分组。4、​​使用COUNT(*)计算总交易数,SUM(amount)计算总金额。语句在SUM函数中条件性地计算批准交易的数量和金额。1、根据题目要求应该根据月份以及国家/地区进行。

2025-09-01 17:27:45 234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除