美文网首页
【数组】合并两个有序数组

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

作者: Spring_java | 来源:发表于2021-07-17 17:50 被阅读0次

    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--];
            }
    
        }
    

    相关文章

      网友评论

          本文标题:【数组】合并两个有序数组

          本文链接:https://www.haomeiwen.com/subject/cmvwpltx.html