合并两个有序数组(Java原址实现)

    技术2022-07-11  114

    合并两个有序数组


    题目

    合并两个有序数组(力扣:88)

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

    说明:

    初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

    分析

    题目中,数组1有足够的空间来存放数组2的元素。

    因为两个数组都是有序的,所以我们使用2个指针,分别指向两个数组中的元素,依次对比元素值,按序列添加到数组1中即可。

    但这里需要注意,如果从小到大比较,因为数组1中m个元素都存储在数组的左端,可能会没有足够空间(或者需要大量移动),所以我们从最右端(m+n-1)这个位置开始存放元素,也就是从大到小查找元素,这样右侧有足够的空间存放数组2,所以不用担心num1中原有元素被覆盖的问题。

    代码实现

    /** * 88. 合并两个有序数组 * @param nums1 * @param m * @param nums2 * @param n */ public void merge(int[] nums1, int m, int[] nums2, int n) { if (nums2 == null || nums2 == null) { return; } int index = m + n - 1; m--; n--; while (m >= 0 && n >= 0) { nums1[index--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--]; } while (n >= 0) { nums1[index--] = nums2[n--]; } }
    Processed: 0.011, SQL: 9