LeetCode 176. 第二高的薪水

题目描述

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. 部门工资前三高的所有员工 困难 分组排序
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/52158541
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!