414. Third Maximum Number(第三大的数)

本文介绍了如何在给定数组中找到第三大的数,讨论了两种方法:排序法和存储法,并分析了它们的时间复杂度。作者提供了C++代码示例,并展示了如何处理数组中存在重复元素的情况。

题目描述

给你一个非空数组,返回此数组中第三大的数 。如果不存在,则返回数组中最大的数。

问题分析

注意要查找的数是数组中第三大的数,相同大小的数算一个,对于此问题可以采用先将数组排序然后查找第三大的数采用排序的方式最快为O(nlog2n)O(nlog_2n)O(nlog2n),也可以采用将前三大的数存储到一个数组中,然后按顺序遍历原数组找出前三大的数,这样时间复杂度为O(n)O(n)O(n)

代码

int thirdMax(int* nums, int numsSize){
    int x[3];
    if(numsSize==2){
        return nums[1]>=nums[0]?nums[1]:nums[0];
    }else if(numsSize==1){
        return nums[0];
    }else{
        int j = 0;
        int xxxx=1;
        for(int i=0; i<numsSize; i++){
            if(j<3){
                int flag = 1;
                for(int k=0; k<j; k++){
                    if(nums[i]==x[k]){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    x[j++] = nums[i];
                }
            }else{
                if(xxxx){
                    for(int i=0; i<3; i++){
                        for(int j=i+1; j<3; j++){
                            if(x[i]<x[j]){
                                int t = x[i];
                                x[i] = x[j];
                                x[j] = t;
                            }
                        }
                    }
                    xxxx = 0;
                }
                int flag = 1;
                for(int k=0; k<3; k++){
                    if(nums[i]==x[k]){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
            		if(nums[i]>x[0]){
	                    x[2] = x[1];
	                    x[1] =x[0];
	                    x[0] = nums[i];
	                }else if(nums[i]>x[1]&&nums[i]!=x[0]){
	                    x[2] = x[1];
	                    x[1] = nums[i];
	                }else if(nums[i]>x[2]&&nums[i]!=x[1]){
	                    x[2] = nums[i];
	                }
                }
            }
        }
        if(j==2){
            return x[1]>x[0]?x[1]:x[0];
        }else if(j==1){
            return x[0];
        }
    }
    for(int i=0; i<3; i++){
        for(int j=i+1; j<3; j++){
            if(x[i]<x[j]){
                int t = x[i];
                x[i] = x[j];
                x[j] = t;
            }
        }
    }
    return x[2];
}

提交结果截图

在这里插入图片描述

### Python 中比较三个字大小的方法 #### 使用 `if` 语句实现比较大小 可以利用嵌套的 `if...elif...else` 结构来进行三者之间的对比。这种方式直观易懂,适合初学者理解逻辑控制流程。 ```python num1 = float(input("Enter first number: ")) num2 = float(input("Enter second number: ")) num3 = float(input("Enter third number: ")) if (num1 >= num2) and (num1 >= num3): largest = num1 elif (num2 >= num1) and (num2 >= num3): largest = num2 else: largest = num3 print(f"The largest number is {largest}.") ``` 此段代码展示了如何通过条件判断找出最大的值[^1]。 #### 利用内置函简化操作 对于更加简洁高效的解决方案,则可借助于Python内建的数据结构特性以及相应的库函完成相同任务。例如,先将待处理据放入列表容器之中,之后调用`max()`获取其中的最大项;同理也可以采用类似的手段找到最小值或是执行完整的升序/降序排列工作。 ```python numbers = [] for i in range(3): number = int(input(f"请输入第{i + 1}个整")) numbers.append(number) sorted_numbers = sorted(numbers, reverse=True) result_string = '>'.join(str(n) for n in sorted_numbers) print(result_string) ``` 上述例子说明了怎样运用列表配合排序功能达到目的,并最终形成符合预期的结果字符串输出形式[^2]。 另外一种简单的方式就是直接应用`min()/max()`组合: ```python a, b, c = map(int, input().split()) maximum_value = max(a,b,c) minimum_value = min(a,b,c) middle_value = sum([a,b,c]) - maximum_value - minimum_value print(minimum_value,middle_value,maximum_value) ``` 这里介绍了另一种思路——分别求取最值并计算中间值得到有序序列[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值