当前位置: 首页 > 知识库问答 >
问题:

在java中合并两个排序数组

宋涵忍
2023-03-14

我知道类似的问题也有人问过,我也研究过很多网站。我已经尝试使用一些答案,但我的代码仍然不能工作。

我正在经历以前的作业,以帮助建立我的Java知识。请原谅我的代码中的任何错误,我还在学习Java。

假设两个输入数组中的元素都按非递减顺序排序(例如[0,1,2,2]和[1,2,3,3,4,5])。返回的“合并”数组必须保留此属性(例如[0,1,1,2,2,2,3,3,4,5])。

输入和输出都允许重复。

如果两个数组中的任何一个数组为null,则返回非null数组作为副本,如果两个数组都为null,则结果也应为null。

以下是我目前所做的,它不符合要求,所以我需要帮助,以便找到正确的解决方案:

public class MergeArray {
    public static int[] merge(int[] arr1, int[] arr2) {
        if (arr1 == null && arr2 == null) {
            return null;
        }
        if (arr1 != null & arr2 == null) {
            return arr1;
        }
        if (arr2 != null & arr1 == null) {
            return arr2;
        }
        int[] merged = new int [arr1.length+arr2.length];

        if (arr1.length > arr2.length) {
            for (int i = 0; i < arr1.length; i++) {

                if (arr1[i] <= arr2[i]) {
                    merged[i] = arr1[i];
                    merged[i + 1] = arr2[i];
                }
                if (arr2[i] < arr1[i]) {
                    merged[i] = arr2[i];
                    merged[i + 1] = arr1[i];
                }
            }
            if (arr1.length < arr2.length) {
                for (int i = 0; i < arr2.length; i++) {

                    if (arr1[i] <= arr2[i]) {
                        merged[i] = arr1[i];
                        merged[i + 1] = arr2[i];
                    }
                    if (arr2[i] < arr1[i]) {
                        merged[i] = arr2[i];
                        merged[i + 1] = arr1[i];
                    }
                }

            }

        }
        return merged;

    }
}

共有1个答案

越星晖
2023-03-14

网上多处对此有很好的解释。看一看合并两个排序数组的Java程序,它展示了算法的图形解释。您可以将方法更改为使用单个while循环作为:

public static int[] merge(int[] arr1, int[] arr2) {
  if (arr1 == null && arr2 == null) return null;
  if (arr1 == null) return arr2.clone();
  if (arr2 == null) return arr1.clone();       

  int[] result = new int[arr1.length + arr2.length];
  int i = 0, j = 0, r = 0;
  while (i < arr1.length && j < arr2.length) {
    if (arr1[i] < arr2[j]) {
      result[r] = arr1[i];
      i++;
    } else {
      result[r] = arr2[j];
      j++;
    }
    r++;
  }
  // Copy the remaining elements in array 1 to result
  if (i < arr1.length) {
    System.arraycopy(arr1, i, result, r, (arr1.length - i));
  }
  // Copy the remaining elements in array 2 to result
  if (j < arr2.length) {
    System.arraycopy(arr2, j, result, r, (arr2.length - j));
  }
  return result;
}
 类似资料:
  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出

  • 问题内容: 这是在采访中问我的,这是我提供的解决方案: 有没有更有效的方法可以做到这一点? 编辑:更正的长度方法。 问题答案: 稍有改进,但是在主循环之后,当到达另一个输入数组的末尾时,可以用来复制其中一个输入数组的结尾。但是,那不会改变你解决方案的性能特征。

  • 本文向大家介绍手写代码:合并两个排序数组相关面试题,主要包含被问及手写代码:合并两个排序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 给定两个未排序的int数组,是否可以使用Java 8或使用任何方法将它们合并到第三个数组中? 有没有可能做这样的事情: 或者是否可以使用任何方法?

  • 我有以下课程: