合并两个排序数组

问题描述 投票:1回答:1

所以问题是:给定两个排序的整数数组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 --;

        }
    }

提前感谢!

java array-merge
1个回答
0
投票

所以问题出在初始化aIndexbIndex的方式上。分别给它们分配mn,然后减小它们(后减量)。这就是为什么它给您ArrayOutOfBoundException

尝试以下方法:

int aIndex = --m; // num1 pointer
int bIndex = --n; // nums2 pointer;
© www.soinside.com 2019 - 2024. All rights reserved.