题目描述
给出你n个数,你的任务就是求出这些数的次大值。那么你会做吗????
输入
有多组数据,每组输出一个n(n<=10^5),然后有n个数据(int范围内)。
输出
每组输出一个次大值。
样例输入
3
3 2 1
6
1 2 3 4 5 6
样例输出
2
5
提示
不会出现最大值和次大值相同的情况
注意:
我们AC过很多最大值最小值,这次求次大值若用数组排序后直接输出想要的值,可能会出现时间超限,来看代码吧
代码如下:
#include<stdio.h>
int main()
{
int n,i,s[100003],j,t;//开的数组足够大
while(scanf("%d",&n)!=EOF)//这道题是多组数据
{
for(i=0; i<n; i++)
{
scanf("%d",&s[i]);
}
for(i=0; i<2; i++)//求次大值,所以先找最大再找次大,循环两次
{
for(j=i+1; j<n; j++)//将剩下的与此时的i比较,s[i]一直是剩下的数中最大的数
{
if(s[i]<s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;//两个值的交换
}
}
}
printf("%d\n",s[1]);//得到次大值
}
return 0;
}