【问题标题】:Two array lists两个数组列表
【发布时间】:2025-12-23 22:10:17
【问题描述】:

写一个方法

public static ArrayList<Integer> merge(ArrayList<Integer> a, ArrayList<Integer> b)

合并两个数组列表,两个数组列表中的元素交替出现。如果一个数组 list 比另一个短,然后尽可能地交替,然后附加 较长数组列表中的剩余元素。例如, 如果a是

1 4 9 16

而b是

9 7 4 9 11

然后merge返回数组列表

1 9 4 7 9 4 16 9 11

【问题讨论】:

  • 那你有什么问题?
  • 我需要合并列表。 merge 返回数组列表 1 9 4 7 9 4 16 9 11 a 和 b 的合并
  • 那么,有什么不对?
  • 重复!完全相同的问题:*.com/questions/16165942/…
  • 有很多答案等着你。

标签: arrays


【解决方案1】:
public static ArrayList<Integer> merge(ArrayList<Integer> x,
        ArrayList<Integer> y) {
    ArrayList<Integer> temp = new ArrayList<Integer>(x.size() + y.size());
    int i = 0, j = 0;
    for (i = 0, j = 0; i < x.size() && j < y.size(); i++, j++) {
        temp.add(x.get(i));
        temp.add(y.get(j));
    }
    while (i < x.size()) {
        temp.add(x.get(i));
        i++;
    }
    while (j < y.size()) {
        temp.add(y.get(j));
        j++;
    }
    return temp;

}

Merged is [1, 9, 4, 7, 9, 4, 16, 9, 25, 11, 36, 21, 49, 64, 81]

【讨论】:

    【解决方案2】:
    public static ArrayList<Integer> merge(ArrayList<Integer> x, ArrayList<Integer> y)
    {
        ArrayList<Integer> temp = new ArrayList<Integer>(x.size() + y.size());      
        int m  = x.size() > y.size() ? x.size() : y.size();
    
        for (int i = 0; i < m; i++)
        {
            if (i < x.size()) temp.add(x.get(i));
            if (i < y.size()) temp.add(y.get(i));
        }
    
        return temp;
    }
    

    输出:

    Merged is [1, 9, 4, 7, 9, 4, 16, 9, 25, 11, 36, 21, 49, 64, 81]
    

    【讨论】: