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

本文介绍了一种在O(n)时间复杂度内找到数组中第三大数的方法。若不存在第三大数,则返回最大数。文章提供了详细的解题思路及C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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;    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值