描述
給定一個數組,統計前k大的數並且把這k個數從大到小輸出。
輸入
第一行包含一個整數n,表示數組的大小。n < 100000。
第二行包含n個整數,表示數組的元素,整數之間以一個空格分開。每個整數的絕對值不超過100000000。
第三行包含一個整數k。k < n。
輸出
從大到小輸出前k大的數,每個數一行。
樣例輸入
10
4 5 6 9 8 7 1 2 3 0
5
樣例輸出
9
8
7
6
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,然后發現自己寫的代碼還是有點臃腫。