簡體   English   中英

將兩個排序的數組列表合並為一個排序的數組列表

[英]merging two sorted arraylist into one sorted arraylist

這是我的代碼:

 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}。 我該如何解決?

使用stream的答案是正確的,但是為了完整起見,我想從您的代碼開始提供解決方案。

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++));

如果i < array1.size()j < 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);

在兩個列表的末尾添加Integer Max Value,並將and condition更改為or condition

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

在上面的代碼中,您的使用條件為i <array1.size()&& j <array2.size(),因此如果一個列表首先用盡,則它將退出循環並且將不處理第二個列表中的其余元素。如果計數器未到達末尾,則需要循環處理列表。

 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++;
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM