有什么办法可以摆脱这里的第二个while循环吗?

时间:2020-02-10 20:37:14

标签: algorithm merge

对于this problem,我有一个可行的解决方案:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int count = m+n-1;
        m--;
        n--;
        while(m>=0 && n>=0) {
            if(nums1[m]>nums2[n])
                nums1[count--] = nums1[m--];
            else
                nums1[count--] = nums2[n--];
        }
        while (n>=0) {
            nums1[count--] = nums2[n--];
        }
    }
}

但是我想做的是摆脱第二个while循环。

我尝试过这样的事情:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int count = m+n-1;
        m--;
        n--;
        while(m>=0 || n>=0) {
            if(m>=0 && n>=0 && nums1[m]>nums2[n])
                nums1[count--] = nums1[m--];
            else if(n>=0)
                nums1[count--] = nums2[n--];
        }
    }
}

但是我遇到了数组边界异常。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您确定它是IndexOutOfBoundsException吗?对我来说,问题似乎是,如果n <0和m> = 0,您将得到一个无限循环。

这是一个可行的解决方案,我基本上只是简化了您的工作,并纠正了错误:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int count = m+n-1;
        m--;
        n--;
        while(n>=0) {
            if(m>=0 && nums1[m]>nums2[n])
                nums1[count--] = nums1[m--];
            else
                nums1[count--] = nums2[n--];
        }
    }
}