1. 题意
将两个非逆序合并到其中一个中来。
2. 题解
2.1 合并排序
先将另个数组的值放在前面数组的末尾,再对数组进行排序。
cpp
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
copy(nums2.begin(), nums2.end(), nums1.begin() + m);
sort(nums1.begin(), nums1.end(), less<int>());
}
};
// Time: O(ologn) Space: O(m+n)
2.2 双指针加辅助数组
cpp
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> aux(m + n, 0);
int p = 0;
int p1 = 0;
int p2 = 0;
while (p1 < m || p2 < n) {
if ( p1 < m && p2 < n) {
aux[p++] = nums1[p1] <= nums2[p2] ?
nums1[p1++] : nums2[p2++];
}
else {
aux[p++] = p1 < m ? nums1[p1++] : nums2[p2++];
}
}
copy(aux.begin(), aux.end(), nums1.begin());
for(auto c:aux)
std::cout << c << " ";
}
};
2.3 双指针加逆序优化空间
cpp
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
copy(nums2.begin(), nums2.end(), nums1.begin() + m);
sort(nums1.begin(), nums1.end(), less<int>());
}
};