“她是乌云中的最后一缕光,
牢狱里的最后一把钥匙,
我伸手穿过头顶河水,
抓到的最后一根稻草。” ——《天堂旅行团》
众所周知每个天堂都有自己的高度,这些高度决定了它们在人们心中的位置
高度越高,对应的位置也就越靠前
给你一些天堂的高度h,请你输出在人们心中位置能排在第二的天堂高度
输入格式:
第一行一个正整数 n(2≤n≤10^7)第二行 n 个正整数 h1,h2,…,hn分别表示每个天堂的高度 (1≤h≤10^5)
输出格式:
输出一个正整数,代表能排在第二位的天堂高度
输入样例:
3
3 5 4
输出样例:
4
样例说明
该样例中,最高的天堂高度为5 ,位置排在第二的天堂高度为 4,所以结果为4
开始的时候用数组去做发现超限了(10的7次方的数组强行扩容好像也不对)
尝试用标记法来AC
1.将数组初始化为0
2.从边界值开始遍历记录数组
3.找出第2个大于0的数组元素
题目中的高度第2没说是小于第1,这里又有一个坑,可能排在第2的和第1一样大,所以需要判断第1个大于0的元素是否大于2
(就相当于一堆小朋友排队伍,高的站前,矮的站后,而站在第2,可能和第1一样高)
#include<stdio.h>
int main()
{
int n,a[100001]= {0},m,flag=0;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&m);
a[m]++;
}
for(m=100000; m>=1; m--)
{
if(a[m]>0&&flag==0)
{
if(a[m]>=2)
{
printf("%d",m);
return 0;
}
flag=1;
m--;
}
if(a[m]>0&&flag!=0)
{
printf("%d",m);
break;
}
}
return 0;
}
叮~打卡成功(´・㉨・`)