在合并等长的已排序数组时输出错误。

huangapple go评论102阅读模式
英文:

Wrong output while merging sorted arrays of equal length

问题

  1. 我正在尝试合并两个等长的已排序数组然而我没有得到期望的输出
  2. 下面是我的代码
  3. ```java
  4. public static int[] mergeSorted(int[] arr1, int[] arr2){
  5. int n = arr2.length;
  6. int[] ans = new int[2*n];
  7. int k = 0;
  8. int i = 0;
  9. int j = 0;
  10. while(i < n && j < n){
  11. if(arr1[i] <= arr2[j]){
  12. ans[k] = arr1[i];
  13. i++;
  14. }
  15. else{
  16. ans[k] = arr2[j];
  17. j++;
  18. }
  19. k++;
  20. }
  21. while(i < n){
  22. ans[k] = arr1[i];
  23. k++;
  24. i++;
  25. }
  26. while(j < n){
  27. ans[k] = arr2[j];
  28. k++;
  29. j++;
  30. }
  31. return ans;
  32. }
  33. public static void main(String[] args){
  34. int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};
  35. int[] arr2 = new int[]{2, 4, 6, 9, 13, 300};
  36. int[] ans = mergeSorted(arr1, arr2);
  37. for(int el : ans)
  38. System.out.print(el + " ");
  39. }

输出:

1 2 3 4 5 6 9 13 100 34 29 300

显然,这是不正确的。然而,这段代码适用于更小的输入。我在哪里出错了?

编辑:测试用例错误,因为它们没有排序。代码是正确的。

  1. <details>
  2. <summary>英文:</summary>
  3. I&#39;m trying to merge 2 sorted arrays of equal length. However, I&#39;m not getting the desired output.
  4. Here is my code:
  1. public static int[] mergeSorted(int[] arr1, int[] arr2){
  2. int n = arr2.length;
  3. int[] ans = new int[2*n];
  4. int k = 0;
  5. int i = 0;
  6. int j = 0;
  7. while(i &lt; n &amp;&amp; j &lt; n){
  8. if(arr1[i] &lt;= arr2[j]){
  9. ans[k] = arr1[i];
  10. i++;
  11. }
  12. else{
  13. ans[k] = arr2[j];
  14. j++;
  15. }
  16. k++;
  17. }
  18. while(i &lt; n){
  19. ans[k] = arr1[i];
  20. k++;
  21. i++;
  22. }
  23. while(j &lt; n){
  24. ans[k] = arr2[j];
  25. k++;
  26. j++;
  27. }
  28. return ans;
  29. }
  30. public static void main(String[] args){
  31. int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};
  32. int[] arr2 = new int[]{2, 4, 6, 9, 13, 300};
  33. int[] ans = mergeSorted(arr1, arr2);
  34. for(int el : ans)
  35. System.out.print(el + &quot; &quot;);
  36. }
  1. Output:
  2. 1 2 3 4 5 6 9 13 100 34 29 300
  3. Clearly, this is not correct. However, this code works for smaller inputs. Where am I going wrong?
  4. EDIT: Test cases were wrong as they were not sorted. Code was fine.
  5. </details>
  6. # 答案1
  7. **得分**: 1
  8. 为了使`merge`操作正常工作,你要合并的两个数组应该是有序的。第一个数组并没有按照顺序排列:
  9. ```java
  10. int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};

请修改为:

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

For the merge operation to work, the two arrays you are merging should be in sorted order. The first array is not in sorted order:

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

Change it to:

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

huangapple
  • 本文由 发表于 2020年8月22日 22:04:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/63537055.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定