使用堆的最大和对数组列表

Maximum Sum Pairs Array List using heap

我正在尝试打印由 ArrayL1.get(i)、ArrayL2.get(j) 的总和按降序形成的最大数(数组大小)。不知何故,我下面的代码不是 working.I 需要分别获得 O(n^2 log n) 和 O(n) 的时间和 space 复杂度。 例如: 输入
3
1 2 3
4 5 6
输出 9
8
8

    import java.io.*; 
    import java.util.*; 

public class Source {

    public static void main(String args[]) {
        //below two ArrayList are used to store the given input
        ArrayList<Integer> ArrayL1 = new ArrayList<Integer>();
        ArrayList<Integer> ArrayL2 = new ArrayList<Integer>();

        Scanner in = new Scanner(System.in);
        int n, i;

        // size of ArrayL1 = size of ArrayL2 = n
        n = in.nextInt();

        for (i = 0; i < n; i++) {
            ArrayL1.add(in.nextInt());
        }
        for (i = 0; i < n; i++) {
            ArrayL2.add(in.nextInt());
        }
        KMaxCombinations(ArrayL1,ArrayL2);
    }
        
    static void KMaxCombinations(ArrayList<Integer> ArrayL1,ArrayList<Integer> ArrayL2)  {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder());
        int N = ArrayL1.size();
                            
         for (int i = 0; i < N; i++) 
            for (int j = 0; j < N; j++) 
                pq.add(ArrayL1[i] + ArrayL2[j]); 
     
        int count = 0; 
          
        while (count < N) 
        { 
            System.out.println(pq.peek()); 
            pq.remove(); 
            count++; 
        } 
                            
                                                   }

      

    }

在您的代码中,您试图使用不正确的语法访问 ArrayList 中的元素。意味着您使用的是以下语法

ArrayL1.[i] + ArrayL2.[j]

理想情况下应该是

ArrayL1.get(i) + ArrayL2.get(j)

我更新了Source.java

import java.io.*;
import java.util.*;

public class Source {

    public static void main(String args[]) {
        // below two ArrayList are used to store the given input
        ArrayList<Integer> ArrayL1 = new ArrayList<Integer>();
        ArrayList<Integer> ArrayL2 = new ArrayList<Integer>();

        Scanner in = new Scanner(System.in);
        int n, i;

        // size of ArrayL1 = size of ArrayL2 = n
        n = in.nextInt();

        for (i = 0; i < n; i++) {
            ArrayL1.add(in.nextInt());
        }
        for (i = 0; i < n; i++) {
            ArrayL2.add(in.nextInt());
        }
        KMaxCombinations(ArrayL1, ArrayL2);
    }

    static void KMaxCombinations(ArrayList<Integer> ArrayL1,
            ArrayList<Integer> ArrayL2) {
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>(
                Collections.reverseOrder());
        int N = ArrayL1.size();

        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
                pq.add(ArrayL1.get(i) + ArrayL2.get(j));

        int count = 0;

        while (count < N) {
            System.out.println(pq.peek());
            pq.remove();
            count++;
        }

    }
}

更改上述语法后,程序给出

输出:

3
1 2 3
4 5 6
9
8
8

您还有什么期待吗?