要求:
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.注意:初始化为int型变量的最小值Integer.MIN_VALUE,输出时要注意判断是否为这个最小值,这会导致当输入数组包含一个MIN_VALUE时,会发生误判。我的解决方法是在进行大小比较前,将数组的所有元素加一,这样数组只可能含有MIN_VALUE+1,输出的时候记得减一就可以了。
public int thirdMax(int[] nums) {
int fi = Integer.MIN_VALUE, se = Integer.MIN_VALUE, th = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i] + 1;
if (nums[i] > th && nums[i] < se)
th = nums[i];
if (nums[i] > se && nums[i] < fi) {
th = se;
se = nums[i];
}
if (nums[i] > fi) {
th = se;
se = fi;
fi = nums[i];
}
}
System.out.println(fi);
System.out.println(se);
System.out.println(th);
if (th == Integer.MIN_VALUE && se != Integer.MIN_VALUE)
return fi - 1;
if (th != Integer.MIN_VALUE)
return th - 1;
else if (se != Integer.MIN_VALUE)
return se - 1;
else if (fi != Integer.MIN_VALUE)
return fi - 1;
return 0; //其实这里是没有用的
}