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

如何用另一个大小不同的ArrayList替换ArrayList的所有元素?

岳曦
2023-03-14

给定两个排序整数数组A和B,将B合并为A作为一个排序数组。

注意:您必须修改数组A,以包含A和B的合并。不要在代码中输出任何内容。提示:C用户,请将结果malloc到一个新的数组中并返回结果。

如果A和B中初始化的元素数分别为m和n,则代码执行后数组A的结果大小应为m+n

Input : 
         A : [1 5 8]
         B : [6 9]

Modified A : [1 5 6 8 9]
public class Solution {
    public void merge(ArrayList<Integer> a, ArrayList<Integer> b) {

        int i=0,j=0;
        ArrayList<Integer> al= new ArrayList<Integer>();

        while(i<a.size() && j<b.size()){
            if(a.get(i)<b.get(j)){
            al.add(a.get(i));
            i++;
        }

        else{
            al.add(b.get(j));
            j++;
        }
    }

    while(i<a.size()){
        al.add(a.get(i));
        i++;
    }

    while(j<b.size()){
        al.add(b.get(j));
        j++;
    }
}
public static void ensureSize(ArrayList<Integer> list, int size){
    list.ensureCapacity(size);
    while(list.size()<size){
        list.add(null);
    }
}

ensureSize(a,al.size());
for(int k=0;k<al.size();k++){
     a.set(k,al.get(k));
}

共有1个答案

孙承
2023-03-14

因为两个给定的数组已经排序

投入:A:[1 5 8]B:[6 9]

修改A:[1 5 6 8 9]

public static int[] merge(int[] a, int[] b) {

    int[] answer = new int[a.length + b.length];
    int i = 0, j = 0, k = 0;

    while (i < a.length && j < b.length)
    {
        if (a[i] < b[j])       
            answer[k++] = a[i++];

        else        
            answer[k++] = b[j++];               
    }

    while (i < a.length)  
        answer[k++] = a[i++];


    while (j < b.length)    
        answer[k++] = b[j++];

    return answer;
}
public static int[] merge(int[] a, int[] b) {

    int[] answer = new int[a.length + b.length]
    int i = a.length - 1, j = b.length - 1, k = answer.length;

    while (k > 0)
        answer[--k] = 
            (j < 0 || (i >= 0 && a[i] >= b[j])) ? a[i--] : b[j--];
}
public static <T> ArrayList<T> merge(List<T> a, List<T> b) {
    ArrayList<T> result = new ArrayList<T>();
    int size = Math.max(a.size(), b.size());

    for (int i = 0; i < size; i++) {
        if (i < a.size()) result.add(a.get(i));
        if (i < b.size()) result.add(b.get(i));
    }
    return result;
}
List<Integer> all = new ArrayList<Integer>();
all.addAll(list1);
all.addAll(list2);

Collections.sort(all);

最后一个算法适用于最初不按排序顺序排列的数组,我不认为您正在寻找,但它是一个选项。

如何执行选项:3:

public static void main(String[] args){
    List<Integer> l1 = Arrays.asList(1,5,7,9);
    List<Integer> l2 = Arrays.asList(4,3,11);
    System.out.println(merge(l1,l2));
}

据我所知,您还希望将新的ArrayList与第一个ArrayList合并,并删除任何重复项,我将执行如下操作:

for (Object x : two){
   if (!one.contains(x))
      one.add(x);
}
 类似资料: