首先c++algorithm庫裡面提供了sort函式支援排序。快排實現的。直接sort就可以了。對於最大和次大是可以透過一邊掃描實現的。記錄兩個指標。max1,max2。保留目前位置的次大和最大。然後掃描的時候更新就行了。但是如果排完序的話,最大和次大就是A[N]和A[N-1](ps:如果是嚴格次大的話還是需要再掃描一下,還是如果資料不是太大的話可以採用計數排序就是記錄C[I]表示I這個數字出現幾次,然後從小到大掃描下C陣列就行了。看下I這個數出現幾次就輸出幾次)程式碼:(sort實現):#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int Maxn=1000000;static int n,m;static int A[Maxn];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&A[i]); sort(A+1,A+n+1); printf("%d %d\n",A[n],A[n-1]); return 0;}
首先c++algorithm庫裡面提供了sort函式支援排序。快排實現的。直接sort就可以了。對於最大和次大是可以透過一邊掃描實現的。記錄兩個指標。max1,max2。保留目前位置的次大和最大。然後掃描的時候更新就行了。但是如果排完序的話,最大和次大就是A[N]和A[N-1](ps:如果是嚴格次大的話還是需要再掃描一下,還是如果資料不是太大的話可以採用計數排序就是記錄C[I]表示I這個數字出現幾次,然後從小到大掃描下C陣列就行了。看下I這個數出現幾次就輸出幾次)程式碼:(sort實現):#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int Maxn=1000000;static int n,m;static int A[Maxn];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&A[i]); sort(A+1,A+n+1); printf("%d %d\n",A[n],A[n-1]); return 0;}