【问题标题】:Merging Two Sorted Arrays合并两个排序数组
【发布时间】:2020-05-22 10:13:57
【问题描述】:

所以问题是: 给定两个排序整数数组 nums1 和 nums2,将 nums2 合并为 nums1 作为一个排序数组。

注意:

nums1和nums2中初始化的元素个数分别为m和n。

您可以假设 nums1 有足够的空间(大小大于或等于 m + n)来容纳来自 nums2 的其他元素。

例子:

输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6], n = 3

输出:[1,2,2,3,5,6]

它给了我一个 indexOutOfBoundException 但我很难看出我的逻辑的哪一部分是不正确的。

public void merge(int[] nums1, int m, int[] nums2, int n) {
        int aIndex = m--; // num1 pointer
        int bIndex = n--; // nums2 pointer;
        int mergeIndex = nums1.length - 1; //mergePointer

        while(mergeIndex >=  0) {
            if(aIndex < 0) {
                nums1[mergeIndex] = nums2[bIndex];
                bIndex--;   
            }
            else if (bIndex < 0) {
                nums1[mergeIndex] = nums1[aIndex];
                aIndex--;
            }
            else {
                if(nums1[aIndex] > nums2[bIndex]) {
                    nums1[mergeIndex] = nums1[aIndex];
                    aIndex--;
                }
                else {
                    nums1[mergeIndex] = nums2[bIndex];
                    bIndex--;
                }
            }
            mergeIndex --;

        }
    }

提前致谢!

【问题讨论】:

  • 这个方法的输入是什么? mn 是什么?
  • nums1和nums2中初始化的元素个数分别为m和n。

标签: java array-merge


【解决方案1】:

所以问题在于您初始化aIndexbIndex 的方式。您将它们分配给mn,然后减少它们(减少后)。这就是为什么它给你ArrayOutOfBoundException

试试这个:

int aIndex = --m; // num1 pointer
int bIndex = --n; // nums2 pointer;

【讨论】:

  • 知道了!因此,如果 m = 5,代码 m-- 将显示 aIndex = 5 然后递减它,而 --m 将显示 aIndex 为 4。我得到的正确吗?
  • 为什么要递减 m 和 n? int aIndex = m-1; int bIndex = n-1; int mergeIndex = m+n-1;(因为nums1.length 可以大于m+n)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2011-04-05
  • 2015-12-15
  • 2019-09-09
  • 2021-03-04
相关资源
最近更新 更多