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.
解题思路:若是数组中只出现一个或两个不同的元素,输出最大值。所以,设置count进行筛选。注意[1,-2147483648,2]和[1,2]这两种情况下,max都是2,second都是1,third都是-2147483648。但是前者应该输出-2147483648,后者应该输出2。所以需要t标志位来确定数组中是否出现-2147483648。
代码:
class Solution {
public:
int thirdMax(vector<int>& nums) {
int max, mid, min, count, t;
max = mid = min = Integer.MIN_VALUE;
count = 0;
t = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == Integer.MIN_VALUE) {
t = 1;
}
if (nums[i] > max) {
min = mid;
mid = max;
max = nums[i];
count++;
}
else if (nums[i] > mid && nums[i] < max) {
min = mid;
mid = nums[i];
count++;
}
else if (nums[i] > min && nums[i] < mid) {
min = nums[i];
count++;
}
}
if (count < 2 || (count == 2 && t == 0)) {
return max;
} else {
return min;
}
}
};
不知道正确与否,望大家指正