(分治)7617:輸出前k大的數


描述 
給定一個數組,統計前k大的數並且把這k個數從大到小輸出。

輸入 
第一行包含一個整數n,表示數組的大小。n < 100000。 
第二行包含n個整數,表示數組的元素,整數之間以一個空格分開。每個整數的絕對值不超過100000000。 
第三行包含一個整數k。k < n。

輸出 
從大到小輸出前k大的數,每個數一行。

樣例輸入 
10 
4 5 6 9 8 7 1 2 3 0 
5

樣例輸出 




5

我の思考 
這個題看起來不難,數字比較大,就是希望我們在時間上能少一點,然后我們就去避免把去排序所有的數字。我們就假設這個k值,分成大於k的和小於k的。如果我們要輸出的k比排序后得到的大的部分的數組相等或者要小,我們就排序這里的。如果還欠了數字,我們就把剩下的小數組里面取出排在前n-k個的。

我の代碼

#include <iostream>
#include <algorithm>
using namespace std;
int x[100005];
int b[100005];
int c[100005];
int j=0;
int m=0;
bool cmp(int one,int two){
    return one>two;
}

void func(int* a,int k,int y){
    sort(a,a+y,cmp);
    for(int n=0;n<k;n++){
        cout<<a[n]<<endl;
    }
    if(k-1<=y){
        return;
    }

    if(k-1>y){
        func(b,k-y,j);
    }
}

int main()
{

    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>x[i];
    }

    int k;
    cin>>k;

    for(int i=0;i<n;i++){
        if(x[i]<k){
            b[j]=x[i];
            j++;
        }else{
            c[m]=x[i];
            m++;
        }
    }

    func(c,k,m);
    return 0;
}

我の小結 
其實之前還不熟悉sort函數的用法還有頭文件QAQ,然后發現自己寫的代碼還是有點臃腫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM