我正在尝试合并两个等长的排序数组。但是,我没有得到想要的输出。这是我的密码:
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
显然,这是不正确的。但是,此代码适用于较小的输入。我哪里出错了?
编辑:测试用例是错误的,因为它们没有被分类。密码很好。
1条答案
按热度按时间a11xaf1n1#
对于
merge
要使操作正常工作,要合并的两个数组应该按顺序排序。第一个数组未按顺序排序:更改为: