88. 合并两个有序数组
给你两个有序整数数组 nums1
和 nums2
,请你将 nums2
合并到 nums1
中,使 nums1
成为一个有序数组。
初始化 nums1
和 nums2
的元素数量分别为 m
和 n
。你可以假设 nums1
的空间大小等于 m + n
,这样它就有足够的空间保存来自 nums2
的元素。
例子1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
例子2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
分析:
合并最后到一个数组了,所以该数组的最大数组元素个数是 n+m.最大下标是 n+m-1;
由于第一个数组能满足要求,所以就全部存放到第一个数组中。
设置下标 i=m-1; 下标j =n-1; 下标 k=n+m-1;
依次比较 数组A 和数组B 的下标大小,那个大,就把那个放到最大下标处,同时还更改下标,再次便利
直到一方下标出界。
如果B还没有遍历结束。因为A如果遍历结束后,A元素还是在A数组中,A本来就是有序的。所以只可能存在
B没有遍历结束的场景
那么就把B元素再次遍历,放到A中。
上代码:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1;
int j=n-1;
int k=m+n-1;
while(i>=0&& j>=0){
nums1[k--]=nums1[i]>nums2[j]?nums1[i--]:nums2[j--];
}
while(j>=0){
nums1[k--]=nums2[j--];
}
}
网友评论