LeetCode 176. 第二高的薪水
题目描述
思路分析
解法一:一次扫描(推荐)
核心思路:
- 维护第一大和第二大薪水,且必须是不同值。
- 遍历时根据当前值更新两者。
- 若不存在第二大,返回空值。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示薪水数量。
- 空间复杂度:O(1)。
class Solution {
public Integer secondHighestSalary(int[] salaries) {
Integer first = null;
Integer second = null;
for (int s : salaries) {
if (first == null || s > first) {
if (first != null && s != first) {
second = first;
}
first = s;
} else if (s != first && (second == null || s > second)) {
second = s;
}
}
return second;
}
}
func secondHighestSalary(salaries []int) *int {
var first *int
var second *int
for _, s := range salaries {
if first == nil || s > *first {
if first != nil && s != *first {
v := *first
second = &v
}
v := s
first = &v
} else if s != *first && (second == nil || s > *second) {
v := s
second = &v
}
}
return second
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 176. 第二高的薪水 | 中等 | 线性扫描 |
| 177. 第N高的薪水 | 中等 | 排序 |
| 184. 部门工资最高的员工 | 中等 | 分组统计 |
| 178. 分数排名 | 中等 | 排序 |
| 185. 部门工资前三高的所有员工 | 困难 | 分组排序 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!