题目:
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
算法:
一般的想法是排序加遍历,或者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
}