力扣链接:https://leetcode.cn/problems/merge-sorted-array/
题目
给你两个按非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n,分别表示 nums1 和 nums2 中的元素数目。
请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。
思路
假设 nums1 = [1, 2, 3, 0, 0, 0], m = 3, nums2 = [2, 5, 6], n = 3
定义两个整型,代表下标
end2 > end1,把 end2 赋给 end,end2 前移,end 前移
end2 > end1,把 end2 赋给 end,end2 前移,end 前移
end1 > end2,把 end1 赋给 end,end1 前移,end 前移
end1 == end2,把 end2 赋值给 end(把 end1 赋给 end 也可以),end2 前移,end 前移
end2 < 0,结束
假如 end1 先结束,那就直接把 nums2 剩余的元素放到 end 处
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1 = m - 1;
int end2 = n - 1;
int end = m + n -1;
while(end1 >= 0 && end2 >= 0)
{
if(*(nums1 + end1) > *(nums2 + end2))
nums1[end--] = nums1[end1--];
else
nums1[end--] = nums2[end2--];
}
while(end2 >= 0)
{
nums1[end--] = nums2[end2--];
}
}