☆打卡算法☆LeetCode 176. 第二高的薪水 算法解析

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

推荐阅读

大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

一、题目

1、算法题目

“编写SQL查询,获取并返回Employee表中第二高的薪水,查询应该返回null。”

题目链接:

来源:力扣(LeetCode)

链接: 176. 第二高的薪水 - 力扣(LeetCode)

2、题目描述

Employee 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+

id 是这个表的主键。 表的每一行包含员工的工资信息。  

编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。

查询结果如下例所示。

示例 1:
输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
示例 2:
输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

二、解题

1、思路分析

将表中的薪资进行排序,然后使用 LIMIT 子句得到第二高的薪资。

为了避免遇到没有数据的情况,可以将其作为临时表。

2、代码实现

代码参考:

SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

image.png

3、时间复杂度

时间复杂度:

空间复杂度:

三、总结

当然为了避免遇到没有数据的情况,还可以使用 IFNULL函数。

猜你喜欢

转载自juejin.im/post/7126401475386802184