week5-[一维数组]归并
week5-[一维数组]归并
题目描述
给定两个已经从小到大排序的数组 a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,…,an 和 b1,b2,…,bmb_1,b_2,\ldots,b_mb1,b2,…,bm,将它们合并成一个数组 c1,c2,…,cn+mc_1,c_2,\ldots,c_{n+m}c1,c2,…,cn+m 并且从小到大输出元素。
输入格式
输入共 333 行。
第 111 行 222 个正整数 n,mn,mn,m。
第 222 行 nnn 个正整数 aia_iai。
第 333 行 mmm 个正整数 bib_ibi。
输出格式
输出共 111 行 n+mn + mn+m 个正整数表示答案。
样例 #1
样例输入 #1
4 6
3 5 7 8
2 3 4 8 9 9
样例输出 #1
2 3 3 4 5 7 8 8 9 9
提示
数据范围
对于所有数据,1≤n,m,ai,bi≤1001 \leq n,m,a_i,b_i\leq 1001≤n,m,ai,bi≤100,保证 ai≤ai+1,bi≤bi+1a_i\leq a_{i+1},b_i\leq b_{i+1}ai≤ai+1,bi≤bi+1。
#include <bits/stdc++.h>
using namespace std;int main() {int n, m;cin >> n >> m;int a[110], b[110], c[220]; // 数据范围 ≤100,开大一点足够for (int i = 0; i < n; i++) cin >> a[i];for (int j = 0; j < m; j++) cin >> b[j];int i = 0, j = 0, k = 0;// 合并过程for ( ; i < n && j < m; k++) {if (a[i] <= b[j]) {c[k] = a[i];i++;} else {c[k] = b[j];j++;}}// 把剩下的复制过来for ( ; i < n; i++, k++) c[k] = a[i];for ( ; j < m; j++, k++) c[k] = b[j];// 输出for (int t = 0; t < n + m; t++) {if (t) cout << " ";cout << c[t];}cout << "\n";return 0;
}
#include <bits/stdc++.h>
using namespace std;int main() {int n, m;cin >> n >> m;vector<int> a(n), b(m), c(n + m);for (int i = 0; i < n; i++) cin >> a[i];for (int j = 0; j < m; j++) cin >> b[j];int i = 0, j = 0, k = 0;for ( ; i < n && j < m; k++) {if (a[i] <= b[j]) {c[k] = a[i];i++;} else {c[k] = b[j];j++;}}// 把剩下的元素复制过来for ( ; i < n; i++, k++) c[k] = a[i];for ( ; j < m; j++, k++) c[k] = b[j];for (int t = 0; t < n + m; t++) {if (t) cout << " ";cout << c[t];}cout << "\n";return 0;
}