算法初步——其他高效算法与技巧B1045/A1101.快速排序(本题与B1040/A1093的思路很像,认真体会这两题思想)

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
const int MAXN = 100005;
//const int MOD = 1000000007;
const int INF = 0x3fffffff;//一个很大的数
int a[MAXN],leftMax[MAXN],rightMin[MAXN];
//ans记录所有主元,num为主元个数
int ans[MAXN],num = 0;
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>a[i];
    }
    leftMax[0] = 0;//A[0]左边没有比它大的数
    for(int i = 0;i<n;++i){
        leftMax[i] = max(leftMax[i-1],a[i-1]);//由i-1 推的 i
    }
    rightMin[n-1] = INF;//A[n-1]右边没有比它小的数
    for(int i=n-2;i>=0;--i){
        rightMin[i] = min(rightMin[i+1],a[i+1]);
    }
    for(int i=0;i<n;++i){
        //左边所有数比它小,右边所有数比它大
        if(leftMax[i] < a[i] && rightMin[i] > a[i]){
            ans[num++] = a[i];
        }
    }
    cout<<num<<endl;
    for(int i=0;i<num;++i){
        cout<<ans[i];
        if(i < num - 1){
            cout<<" ";
        }
    }
    cout<<endl;
    system("pause");
    return 0;
} 
原文地址:https://www.cnblogs.com/JasonPeng1/p/12196844.html