Given a non-empty array of integers, return thethird 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.
public int thirdMax(int[] nums) {
int one, two, three, count = 0;
one = two = three = Integer.MIN_VALUE;
for (int x : nums) {
//若相同继续循环,要有count判断,因为nums中可能有Integer.MIN_VALUE
if (x == one && count >= 1 || x == two && count >= 2 || x == three
&& count >= 3)
continue;
if (x > one) {
three = two;
two = one;
one = x;
count++;
} else if (x > two) {
three = two;
two = x;
count++;
//此处一定是有等于的,若没有有可能露掉
//int nums[] = { 1, 2, Integer.MIN_VALUE };缺少一次判断
} else if (x >= three) {
three = x;
count++;
}
}
//count 代表更新的次数,若大于等于3,表示有第三大的数
if (count >= 3)
return three;
else
return one;
}