2020-04-24--黑寡妇的复活

题目描述
为了复活那些被灭霸消灭的人,复仇者去了以前的各个地方找无限宝石,而黑寡妇和鹰眼去了灵魂宝石的所在处。为了取得灵魂宝石,黑寡妇牺牲了。在复仇者把灭霸给杀死后,美队想要复活黑寡妇,于是拜托奇异博士想办法。奇异博士利用时间宝石寻找复活黑寡妇的办法。想要救黑寡妇就得去黑暗维度找到黑寡妇的灵魂给带回来即可复活。于是复仇者去了通往黑暗维度的大门,但是大门有个守卫。守卫有一道题需要复仇者解答,解答对了就可以打开通往黑暗维度的大门。题目:给你nnn个数,如果给你的数是−1-1−1,你就要说出已输入的数中次大的值。现在复仇者对这个题毫无办法,你能帮复仇者解决这个问题吗?帮复仇者复活黑寡妇。
输入描述
第一行给一个正整数n,(1≤n≤2×10^6)
第二行给出n个正整数 a1,a2,a3,…,an,(−1≤ai≤10^9)
输入保证对于每个 ai=−1,次大值一定存在
输出描述
如果ai=−1,就输出次大值,每个输出占一行
样例输入 1:
10
10 0 5 -1 12 3 8 -1 -1 9
样例输出 1:
5
10
10

TIP–解题思路:
显然使用sort快排会直接超时,因此可以首先找到第一个-1,对第一个-1前面的所有数进行排序,找到最大值max和次大值semax。再去扫描数组如果遇到a[i]>=max;将a[i]赋值给max,max赋值给semax;如果遇到a[i]大于semax小于max,则a[i]赋值给semax;

#include<bits/stdc++.h>

using namespace std;
int n;

int main(){

    std::ios::sync_with_stdio(0);
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int i=0;
    for(int i=0;i<n;i++){
        if(a[i]==-1){
            break;
        }
    }
    sort(a,a+i);
    int max=a[i];
    int semax=a[i-1];
for(int j=i+1;j<n;j++){
    if(a[j]==-1){
        cout<<semax<<endl;
    }
     if(a[j]>=max){
         semax=max;
         max=a[j];
     }
     if(a[j]>semax&&a[j]<max){
         semax=a[j];
     }
}

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值