给你两个按 非递减顺序 排列的整数数组 nums1
和 nums2
,另有两个整数 m
和 n
,分别表示 nums1
和 nums2
中的元素数目。
请你 合并 nums2
到 nums1
中,使合并后的数组同样按 非递减顺序 排列。
思路1:
直接将nums2插入到nums1后面,再使用快排
class Solution {
public:
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());
}
};
思路2:
双指针以此比大小让小的暂时等于cur,然后存入sroted中,如果nums1或者nums2其中一个数组的数存完了,则另外一个数字后面的数以此存入sorted。当两个数组存完之后,再使nums复试sorted中的数,从而实现nums1和nums2有序的合并到nums1中
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p1 = 0;
int p2 = 0;
int sroted[m+n];
int cur;
while(p1 < m || p2 < n)
{
if(p1 == m)
{
cur = nums2[p2++];
}
else if(p2 == n)
{
cur = nums1[p1++];
}
else if(nums1[p1] < nums2[p2])
{
cur = nums1[p1++];
}
else
{
cur = nums2[p2++];
}
sroted[p1 + p2 - 1] = cur;
}
for(int i = 0;i != m + n; ++i)
{
nums1[1] = sroted[i];
}
}
};