414.第三大的数
题目链接:力扣
使用算法-数组篇的线性枚举。
如果比第一大还大,就让第一大等于该数字,否则小于第一大,大于第二大数字就让第二大数字等于该数字,否则小于第二大但大于第三大数字,就让第三大数字等于该数字。
复杂度为 O ( n ) O(n) O(n)。
注意,因为最小的数字就是 int 的最小值,所以需要有更小的数字才能判断。
int thirdMax(int* nums, int numsSize){
int i, x, c;
long long a1, a2, a3;
a1 = a2 = a3 = LLONG_MIN;
c = 0;
for (i = 0; i < numsSize; i++) {
x = nums[i];
if (x > a1) a3 = a2, a2 = a1, a1 = x, c++;
else if (x < a1 && x > a2) a3 = a2, a2 = x, c++;
else if (x < a2 && x > a3) a3 = x, c++;
}
if (c < 3) return a1;
return a3;
}