排序一次查找两元素

Posted rhythm-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序一次查找两元素相关的知识,希望对你有一定的参考价值。

问题 A: 【排序】一次查找两元素

时间限制: 1 Sec  内存限制: 64 MB
提交: 30  解决: 21
[提交] [状态] [讨论版] [命题人:]

题目描述

修罗王和邪狼逃出监狱,混入了监狱门口检查站前排成一列准备待检的囚犯人群中,由于每个囚犯入狱前均以编号来表示,且该编号的编写规则是囚犯的危险性越大,则编号就越小。显然,修罗王和邪狼因其极端的危险性,其编号必定是这一列无序排列的人群中最小的两个,那么,如何对所有人的编号只用一遍扫描,即找出修罗王和邪狼的编号呢?

输入

共两行,第一行为一个数N(N≤1000000),即排队的人数,第二行为N个数,即每个人的编号,每个编号均不超过int类型的最大值。

输出

输出由小到大排列的最小的两个编号。

样例输入

10
2 1 76 11 4 765 32 56 3 23

样例输出

1 2
分析:排序,输出前两个元素。
技术分享图片
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int n;
vector<int>num;
void init(){
    cin>>n;
    num.resize(n+1);
    range(i,1,n)cin>>num[i];
    sort(num.begin()+1,num.end());
}
void solve(){
    cout<<num[1]<<" "<<num[2]<<endl;
}
int main() {
    init();
    solve();
    return 0;
}
View Code

 

 







以上是关于排序一次查找两元素的主要内容,如果未能解决你的问题,请参考以下文章

[34]. 在排序数组中查找元素的第一个和最后一个位置

数组冒泡排序选择排序二分查找法

基础排序算法总览

快排查找数组中的第K个最大元素

数组的高级(排序和查找)

常用类