l414-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).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.

解题思路

  • 使用三个变量

Go代码

Go代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import "math"

func (nums []int) int {
ret := []int{math.MinInt64, math.MinInt64, math.MinInt64}

for _,n := range nums{
if n == ret[0] || n == ret[1] || n == ret[2] {
continue
}
if n > ret[0]{
ret = []int{n, ret[0], ret[1]}
}else if n>ret[1] {
ret = []int{ret[0], n, ret[1]}
}else if n>ret[2]{
ret = []int{ret[0], ret[1], n}
}
}
if ret[2] == math.MinInt64{
return ret[0]
}else{
return ret[2]
}
}