先偷点懒
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
//先拷贝,再排序
for (int i = 0; i < n; i++)
{
nums1[m + i] = nums2[i];
}
sort(nums1.begin(), nums1.end());
}
这题可以使用归并排序和插入排序的思想,注意原址排序
#include <iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = 0;
int value =0;
int index = 0;
while (i < n){
value = nums2[i];
bool flags = false;//标记元素是否插入
while (!flags){
if (value <nums1[index])
{
//插入之前,原数组所有的元素后移
for (int j = m - n + i - 1; j >= index; j--)
{
nums1[j + 1] = nums1[j];
}
nums1[index] = value;
index++;
flags = true;
i++;
}
else{
index++;
if (index >= m - n + i) break;
}
}
if (index >=m - n + i)
{
for (int k = index; k < m; k++)
{
nums1[k] = nums2[i++];
}
return;
}
}
}
int main()
{
vector<int> vec1 = { 1,2,3,0,0,0 };
vector<int> vec2 = { 2,5,6};
vector<int> res;
merge(vec1,6,vec2,3);
for (int i = 0; i < vec1.size(); i++)
{
cout << vec1[i] << endl;
}
system("pause");
return 0;
}
本地测试通过,但是leetcode提交不通过