【数组】合并两个有序数组

88. 合并两个有序数组

给你两个有序整数数组 nums1nums2,请你将 nums2合并到 nums1使 nums1成为一个有序数组。

初始化 nums1nums2 的元素数量分别为 mn。你可以假设 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--];
        }

    }

你可能感兴趣的:(【数组】合并两个有序数组)