题目链接:
又是这个题,但是我们换一种思路,之前的那种解法是时间换空间,而这次是空间换时间,我们只需要多定义几个变量即可
我们可以定义两个变量,分别是end1和end2,分别用来遍历两个数组。由于修改之后的数组要是从小到大排好的,所以只需要让两个数组的值进行比大小即可,也就是nums1[end1]和nums2[end2]比大小,谁大就放进原来的数组即可。
在这里,如果nums2提前比nums1遍历完了,那没什么。如果nums1的值都遍历完了,但是nums2的值还没有,那我们就需要把nums2[]的值再加进去,所以程序的最后需要再加入一个循环用来把nums2的值放进去。
代码如下:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1 = m-1;
int end2 = n-1;
int i = nums1Size-1;
while(end1 >= 0 && end2 >= 0)
{
if(nums1[end1] > nums2[end2])
{
nums1[i--] = nums1[end1--];
}
else
{
nums1[i--] = nums2[end2--];
}
}
while(end2 >= 0)
{
nums1[i--] = nums2[end2--];
}
}

本文介绍了一种优化方法,用空间换取时间,通过定义end1和end2遍历两个有序数组nums1和nums2,按需比较并合并,确保最终数组有序。当一个数组遍历完时,将另一个数组剩余元素添加至结果。

被折叠的 条评论
为什么被折叠?



