【问题标题】:merging two sorted arraylist into one sorted arraylist将两个排序的数组列表合并为一个排序的数组列表
【发布时间】:2017-05-20 17:28:46
【问题描述】:

这是我的代码:

 for (int i = 0, j = 0; i < array1.size() && j < array2.size();) {
    if (array1.get(i) < array2.get(j)) {
        list.add(array1.get(i));
        i++;
    } else {
        list.add(array2.get(j));
        j++;
    }
}

问题是我无法获得最大的数字。例如,如果我有两个数组 {1, 3, 5} 和 {2, 4, 6},则该代码给我 {1, 2, 3, 4, 5}。我该如何解决?

【问题讨论】:

  • 你的代码几乎是正确的,想想当你使用其中一个数组的所有元素时会发生什么。
  • i
  • 你想要什么预期的结果?
  • 联合 junction...那个功能怎么样?
  • 也许这对你有帮助:mkyong.com/java/java-how-to-join-arrays

标签: java sorting arraylist


【解决方案1】:

使用流的答案是正确的,但为了完整起见,我想从您的代码开始提供解决方案。

int i, j;
for (i = 0, j = 0; i < array1.size() && j < array2.size();) {
    if (array1.get(i) < array2.get(j)) {
        list.add(array1.get(i));
        i++;
    } else {
        list.add(array2.get(j));
        j++;
    }
}

while(i < array1.size()) list.add(array1.get(i++));
while(j < array2.size()) list.add(array2.get(j++));

【讨论】:

    【解决方案2】:

    如果i &lt; array1.size()j &lt; array2.size() 条件之一失败,您的for 循环将退出,这意味着它不会处理(和排序)另一个数组中的剩余元素。

    这是连接和排序两个数组的stream 方法:

    int[] a1 = new int[]{1,3,5};
    int[] a2 = new int[]{2,4,6};
    List<Integer> result = IntStream.concat(Arrays.stream(a1), Arrays.stream(a2))
        .boxed()
        .sorted()
        .collect(Collectors.toList());
    
    System.out.println(result);
    

    【讨论】:

      【解决方案3】:

      在两个列表的末尾添加整数最大值并将and条件更改为or条件

      List<Integer> array1 = new ArrayList<>(Arrays.asList(1, 3, 5));
      List<Integer> array2 = new ArrayList<>(Arrays.asList(2, 4, 6));
      
      List<Integer> list = new ArrayList<>();
      
      array1.add(Integer.MAX_VALUE); //Add Integer Max Value
      array2.add(Integer.MAX_VALUE); //Add Integer Max Value
      
      for (int i = 0, j = 0; i < array1.size() - 1 || j < array2.size() - 1; ) {
          if (array1.get(i) < array2.get(j)) {
              list.add(array1.get(i));
              i++;
          } else {
              list.add(array2.get(j));
              j++;
          }
      }
      
      System.out.println(list);
      
      array1.remove(array1.size() - 1); //Remove Integer Max Value
      array2.remove(array2.size() - 1); //Remove Integer Max Value
      

      【讨论】:

        【解决方案4】:

        在您的代码上方,您的使用条件 i

         int i = 0;
                    int j = 0;
                    while (i < array1.size() && j < array2.size()) {
                        if (array1.get(i) < array2.get(j)) {
                            list.add(array1.get(i));
                            i++;
                        } else {
                            list.add(array2.get(j));
                            j++;
                        }
                    }
                    while (i < array1.size()) {
                        list.add(array1.get(i));
                        i++;
                    }
                    while (j < array2.size()) {
                        list.add(array2.get(j));
                        j++;
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 2013-11-10
          • 1970-01-01
          • 2015-05-12
          相关资源
          最近更新 更多