查找数组中第二大的数

部署运行你感兴趣的模型镜像

方法一:先进行排序,然后直接很具数组下标对倒数第二个数进行查找即可,此时时间复杂度最好为:O(nlogn)

方法二:设置两个变量(一个保存最大的数,一个保存第二大的数)进行判断。对数组进行一边的遍历,即可在时间复杂度为 n 的情况下查找出第二大的数。

程序代码:

#include<iostream>
using namespace std;

int Find_Sec(int *a,int n)
{
	int Max=a[0];
	int Max_Sec=-1;
	for(int i=1;i<n;i++)
	{
		if(a[i]>Max)
		{
			Max_Sec=Max;
			Max=a[i];
		}
		if(a[i]<Max&&a[i]>Max_Sec)
		{
			Max_Sec=a[i];
		}
	}
	return Max_Sec;
}


int main()
{
	int a[]={1,2,3,4,5,6,7,8,9};
	int length_a=sizeof(a)/sizeof(a[0]);
	int result=Find_Sec(a,length_a);
	cout<<"第二大的数为:"<<result<<endl;
	cout<<endl;
	system("pause");
	return 0;
}

程序输出:



您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

查找数组中**第二**,有多种方法,取决于你是否允许重复值、是否需要索引或只是值,以及使用的库(如 NumPy)。以下是几种常见且高效的实现方式。 --- ### ✅ 方法一:使用 `numpy.partition`(推荐,高效) 利用 `np.partition` 可以部分排序,找到第 `k` 小的元素。我们要找第二,相当于找第 `n-2` 小的(`n` 是数组长度)。 ```python import numpy as np def second_largest(arr): unique_vals = np.unique(arr) # 去重,避免 [5,5,4] 这种情况把 5 当作第二 if len(unique_vals) < 2: raise ValueError("数组中至少需要两个不同的值") return np.partition(unique_vals, -2)[-2] # 示例 arr = np.array([3, 1, 5, 5, 4]) result = second_largest(arr) print(result) # 输出: 4 ``` > ⚡ 优点:时间复杂度接近 O(n),适合数组。 --- ### ✅ 方法二:去重后排序取倒数第二个 简单直观,适用于小数组: ```python import numpy as np arr = np.array([3, 1, 5, 5, 4]) unique_sorted = np.unique(arr) if len(unique_sorted) >= 2: second_max = unique_sorted[-2] print(second_max) # 输出: 4 else: print("没有第二元素") ``` --- ### ✅ 方法三:手动遍历(适合自定义逻辑或内存受限) 一次遍历即可完成,空间和时间最优: ```python def find_second_largest(arr): if len(arr) < 2: return None first = second = -np.inf for x in arr: if x > first: second = first first = x elif x > second and x < first: second = x return second if second != -np.inf else None # 示例 arr = [3, 1, 5, 5, 4] print(find_second_largest(arr)) # 输出: 4 ``` > ✅ 支持浮点、负;自动跳过重复最值。 --- ### ✅ 方法四:使用 `heapq.nlargest`(优雅清晰) ```python import heapq import numpy as np arr = np.array([3, 1, 5, 5, 4]) second_max = heapq.nlargest(2, set(arr))[1] # set 去重 print(second_max) # 输出: 4 ``` > 💡 `nlargest(2, ...)` 返回前两值列表,取 `[1]` 即第二的。 --- ### ❗ 注意事项 | 情况 | 处理建议 | |------|----------| | 所有元素相同 | 不存在“第二”,应报错或返回 `None` | | 数组长度 < 2 | 同样无法找第二 | | 存在重复最值 | 应先去重再找第二 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值