0414. Third Maximum Number

# 414. Third Maximum Number#

## 题目 #

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

``````Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.
``````

Example 2:

``````Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
``````

Example 3:

``````Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.
``````

## 解题思路 #

• 水题，动态维护 3 个最大值即可。注意数组中有重复数据的情况。如果只有 2 个数或者 1 个数，则返回 2 个数中的最大值即可。

## 代码 #

``````
package leetcode

import (
"math"
)

func thirdMax(nums []int) int {
a, b, c := math.MinInt64, math.MinInt64, math.MinInt64
for _, v := range nums {
if v > a {
c = b
b = a
a = v
} else if v < a && v > b {
c = b
b = v
} else if v < b && v > c {
c = v
}
}
if c == math.MinInt64 {
return a
}
return c
}

``````

Sep 6, 2020