Problem Description:
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.
Analysis:
本题使用三个变量保存每次的遍历值。代码如下:
Code:
class Solution {
public int thirdMax(int[] nums) {
Integer maxF = null;
Integer maxS = null;
Integer maxT = null;
for(Integer ans : nums) {
if (ans.equals(maxF) || ans.equals(maxS) || ans.equals(maxT)) continue;
if (maxF == null || ans > maxF) {
maxT = maxS;
maxS = maxF;
maxF= ans;
} else if (maxS == null || ans > maxS) {
maxT = maxS;
maxS = ans;
} else if (maxT == null || ans > maxT) {
maxT = ans;
}
}
return maxT == null ? maxF : maxT;
}
}