第一个思路,也是正常人一下子就能想出来的思路,我直接把nums2插入到nums1中,用sort排序即可,哈哈哈,到时候面试官跟你说让你回去等通知吧。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
while(n)
{
nums1[m] = nums2[n - 1];
m++;n--;
}
sort(nums1.begin(),nums1.end());
}
};
第二个方法,是双指针法,因为这个题已经给出是排好序的两个向量
p1指向nums1的位置,p2指向nums2的位置,然后比较
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int p1,p2,cur;
p1 = p2 = 0;
int sort[m+n];
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++];
sort[p1 + p2 - 1] = cur;
}
for(int i = 0;i < m+n;i++)
nums1[i] = sort[i];
}
};