思路分析:
(1)先定义一个数组暂存合并之后的序列
(2)从两个数组的开头开始比较,由于是非递减序列,因此每次都放入较小的元素
(3)等到一方的遍历到头之后,就判断是哪一方的数组到头了,然后把另一方的数组剩下的元素放到答案数组中。
(4)由于题目要求是合并,因此最后要把答案数组覆盖到nums1数组中
代码实现:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int a[10010]={0};
int i=0,j=0;
int count=0;
while(i<m&&j<n)
{
if(nums1[i]>nums2[j])
a[count++]=nums2[j++];
else a[count++]=nums1[i++];
}
if(i==m)
{
while(j<n)
{
a[count++]=nums2[j++];
}
}
else if(j==n)
{
while(i<m)
{
a[count++]=nums1[i++];
}
}
for(i=0;i<m+n;i++)
{
nums1[i]=a[i];
}
}
};