PAT1045快速排序

著名的快速排序算法里有一個經(jīng)典的劃分過程:我們通常采用某種方法取一個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分后的N個互不相同的正整數(shù)的排列,請問有多少個元素可能是劃分前選取的主元?

例如給定N = 5, 排列是1、3、2、4、5。則:

1的左邊沒有元素,右邊的元素都比它大,所以它可能是主元;
盡管3的左邊元素都比它小,但是它右邊的2它小,所以它不能是主元;
盡管2的右邊元素都比它大,但其左邊的3比它大,所以它不能是主元;
類似原因,4和5都可能是主元。
因此,有3個元素可能是主元。

輸入格式:

輸入在第1行中給出一個正整數(shù)N(<= 105); 第2行是空格分隔的N個不同的正整數(shù),每個數(shù)不超過109。

輸出格式:

在第1行中輸出有可能是主元的元素個數(shù);在第2行中按遞增順序輸出這些元素,其間以1個空格分隔,行末不得有多余空格。

輸入樣例:
5
1 3 2 4 5
輸出樣例:
3
1 4 5

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

const int MAX=100001;


int main(){
    int leftMax[MAX],RightMin[MAX],a[MAX],r[MAX],i,n,c=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",a+i);
    leftMax[0]=a[0]; RightMin[n-1]=a[n-1]; //初始化值
    for(i=1;i<n;i++){
        leftMax[i]=max(leftMax[i-1],a[i-1]); //max為algorithm中的函數(shù)
    }
    for(i=n-2;i>=0;i--){
        RightMin[i]=min(RightMin[i+1],a[i+1]);
    }
    for(i=0;i<n;i++){
        if(a[i]>=leftMax[i]&&a[i]<=RightMin[i]){
            r[c++]=a[i];
        }
    }
    printf("%d\n",c);
    for(i=0;i<c;i++){
        printf("%d",r[i]);
        if(i<c-1){
            printf(" ");
        }
    }
    printf("\n");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,853評論 18 399
  • 顧棠把泡了一天的牛筋面、冷面從漂著霉斑的涼水里撈出來,剪成適宜的長度。剛送來的大捆青菜,切掉根,用清水洗掉泥土,碼...
    林簡單830閱讀 410評論 1 1
  • Hbase分布式策略 在學(xué)習(xí)Hbase之前,一定要帶著一個問題,為什么Hbase比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫性能要高很多?...
    skydang閱讀 1,002評論 0 3
  • 新的學(xué)期開始了,我們每天都需要早起。我隨便找了一套方便的衣服穿在身上,早上還有些冷了呢。 室友先去刷牙了,我是最后...
    愛夢的我閱讀 199評論 0 0
  • 八月的最后幾天覺得特別的漫長呢,好像過都過不完,這個熱得人暈乎乎的夏天終于要接近尾聲了。
    6830e983870f閱讀 159評論 0 0

友情鏈接更多精彩內(nèi)容