414.第三大的数

60 阅读1分钟

题目:
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
算法: 一般的想法是排序加遍历,或者map+heap。这里充分利用第三最大这个特性。时间复杂度O(n)

func thirdMax(nums []int) int {
	max1, max2, max3 := math.MinInt64,math.MinInt64,math.MinInt64
	for i := range nums {
		if nums[i] > max1 {
			max3 = max2
			max2 = max1
			max1 = nums[i]
		} else if nums[i] > max2 && nums[i] != max1{
			max3 = max2
			max2 = nums[i]
		} else if nums[i] > max3 && nums[i] != max1 && nums[i] != max2{
			max3 = nums[i]
		}
	}
	if max3 == math.MinInt64 {
		return max1
	}
	return max3
}