合并等长排序数组时输出错误

niwlg2el  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(322)

我正在尝试合并两个等长的排序数组。但是,我没有得到想要的输出。这是我的密码:

public static int[] mergeSorted(int[] arr1, int[] arr2){
        int n = arr2.length;

        int[] ans = new int[2*n];

        int k = 0;
        int i = 0;
        int j = 0;

        while(i < n && j < n){
            if(arr1[i] <= arr2[j]){
                ans[k] = arr1[i];
                i++;
            }
            else{
                ans[k] = arr2[j];
                j++;
            }
            k++;
        }

        while(i < n){
            ans[k] = arr1[i];
            k++;
            i++;
        }

        while(j < n){
            ans[k] = arr2[j];
            k++;
            j++;
        }

        return ans;
    }

    public static void main(String[] args){
        int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};
        int[] arr2 = new int[]{2, 4, 6, 9, 13, 300};

        int[] ans = mergeSorted(arr1, arr2);

        for(int el : ans)
            System.out.print(el + " ");
    }

输出:
1 2 3 4 5 6 9 13 100 34 29 300
显然,这是不正确的。但是,此代码适用于较小的输入。我哪里出错了?
编辑:测试用例是错误的,因为它们没有被分类。密码很好。

a11xaf1n

a11xaf1n1#

对于 merge 要使操作正常工作,要合并的两个数组应该按顺序排序。第一个数组未按顺序排序:

int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};

更改为:

int[] arr1 = new int[]{1, 3, 5, 29, 34, 100};

相关问题