起先本身想嘗試性的直接排序找中位數,內存直接超限;ios
其實這道題能夠採用歸併排序的思路來作:
可是示例依舊白給。。。不過仍是展示了一種思想,代碼以下:spa
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<algorithm> using namespace std; using std::vector; const int maxn=1000010; const int INF=0x7fffffff; int a[maxn]; int b[maxn]; int main(){ int n,m; scanf("%d",&n); int index=0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d",&b[i]); } a[n]=b[m]=INF; int i=0,j=0,ct=0; int mid=(m+n-1)/2; while(ct<mid){ if(a[i]<b[j]){ i++; }else j++; ct++; } if(a[i]<b[j]){ printf("%d\n",a[i]); }else{ printf("%d\n",b[j]); } system("pause"); return 0; }
網上給出了一種示例,可以徹底AC;code
#include <iostream> using namespace std; int k[200005]; int main(){ int n, m, temp, count = 0; cin >> n; for (int i = 1; i <= n; i++) scanf("%d", &k[i]); k[n + 1] = 0x7fffffff; cin >> m; int midpos = (n + m + 1) / 2, i = 1; for (int j = 1; j <= m; j++) { scanf("%d", &temp); while (k[i] < temp) { count++; if (count == midpos) cout << k[i]; i++; } count++; if (count == midpos) cout << temp; } while (i <= n) { count++; if (count == midpos) cout << k[i]; i++; } return 0; }
具體的思路就是,輸入第一個序列;
在輸入第二個序列的時候進行判斷,主要的判斷邏輯爲:
若是輸入的值小於第一個序列的相應值,cout++,跳過該值;
若是大於相應值,進行向後判斷,cout計算增長的值;
若是發現途中cout的值等於中點值,直接進行輸出,程序中止;排序