题目
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).
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.
标签
Array
难度
简单
分析
题目意思是求一个数组里第三大的数字。
解题思路是遍历数组,通过跟三个变量(max, mid, min)的比较,来交换它们之间数字。
C代码实现
int thirdMax(int* nums, int numsSize) {
int i=0, count=0;
long min, mid, max;
min=mid=max=LONG_MIN;
for(i=0; i<numsSize; i++)
{
/* ignore the same value */
if(nums[i]==max || nums[i]==mid)
continue;
if(nums[i] > max)
{
min = mid;
mid = max;
max = nums[i];
count++;
}
else if(nums[i] > mid)
{
min = mid;
mid = nums[i];
count++;
}
else if(nums[i] >= min)
{
min = nums[i];
count++;
}
}
if(count >= 3)
return min;
else
return max;
}