[C语言][LeetCode][414]Third Maximum Number

题目

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;    
}
点赞