Implementacja 4sum w Javie z leetcode

Oświadczenie o problemie z leetcode mówi:

Biorąc pod uwagę tablicę S n liczb całkowitych, czy są elementy a, b, c, i d w S, takie, że a + b + c + d = cel? Znajdź wszystkie unikalne kwadrule w tablicy, która daje sumę celu.

Uwaga:

Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.

O tym problemie z czterema sumami mam 2 pytania:

Gdzie poszedłem źle? Skompilowany kod nie może przejść wszystkich testów, ale pomyślałem, że kod powinien być poprawny, ponieważ do rozwiązania problemu używa się tylko brutalnej siły.Czy istnieje skuteczny sposób na rozwiązanie problemu czterech sum zamiast tego algorytmu czasu wykonywania O (n ^ 4)?
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class FourSumSolution{
    public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target){
        ArrayList<ArrayList<Integer>> aList = new ArrayList<ArrayList<Integer>>();
        int N = num.length;

        for(int i=0; i<N; i++)
            for(int j=i+1; j<N; j++)
                for(int k=j+1; k<N; k++)
                    for(int l=k+1; l<N; l++){
                        int sum = num[i] + num[j] + num[k] + num[l];                        
                        if(sum == target){
                            ArrayList<Integer> tempArray = new ArrayList<Integer>();
                            Collections.addAll(tempArray, num[i], num[j], num[k], num[l]);
                            aList.add(tempArray);
                        }
                    }
        return aList;   
    }
}

questionAnswers(5)

yourAnswerToTheQuestion