题目描述
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
示例
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
解题思路
这道题还是双指针的思想,只不过做的同时也需要灵活一下,如果遍历时均是从开头开始遍历,那么除非开新数组否则原数组的数据可能会在未遍历时便被占据。因此此时可以从后向前遍历,这样因为nums1数组本身空间足以容纳两数组,所以不会在未遍历时便占据nums1数组。
代码如下
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int t1=m-1, t2=n-1,i=nums1Size-1;
while(1){
if(t2<0) break;
if(t1<0){
while(t2>=0){
nums1[i--] = nums2[t2--];
}
break;
}
if(nums1[t1]>nums2[t2]){
nums1[i--] = nums1[t1--];
}
else{
nums1[i--] = nums2[t2--];
}
}
}