Как удалить дубликаты ArrayList из ArrayList из ArrayList - PullRequest
0 голосов
/ 10 ноября 2019

Проблема: Учитывая массив S из n целых чисел, есть ли такие элементы a, b, c в S, что a + b + c = 0? Найти все уникальные триплеты в массиве, который дает сумму нуля.

Мой код:

public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(ArrayList<Integer> A) {
        ArrayList<ArrayList<Integer>> C = new  ArrayList<ArrayList<Integer>>();
        int n = A.size();
        for(int i =0; i<n-2; i++){
            for(int j=i+1; j<n-1; j++){
                for(int k=j+1; k< n; k++){
                    int sum = A.get(i)+A.get(j)+A.get(k);
                    if(sum == 0){
                        ArrayList<Integer> temp = new ArrayList<Integer>();
                        temp.add(A.get(i));
                        temp.add(A.get(j));
                        temp.add(A.get(k));
                        C.add(temp);
                    }
                }
            }

        }
      return C;
    }
}

Так что C может содержать повторяющийся Arraylist, и моя цель состоит в том, чтобыудалить повторяющийся Arraylist из C

Пример: C = [-5 1 4] [-5 1 4] [-5 1 4] [-5 4 1] [-4 0 4] [-4 0 4]
Моя цель получить = [-5 1 4] [-5 4 1] [-4 0 4]

Пожалуйста, предложите мне несколько способов сделать какую-нибудь операцию на C, чтобы я мог это сделать.

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Метод equals в AbstractList (который расширяет ArrayList) определяется так, чтобы два списка были равны, если они содержат одинаковые элементы в одинаковом порядке. В таком случае проще всего получить отдельные списки из потока:

List<List<Integer>> list = new ArrayList<>();
list.add(Arrays.asList(-5, 1, 4));
list.add(Arrays.asList(-5, 1, 4));
list.add(Arrays.asList(-5, 4, 1));
list.add(Arrays.asList(-4, 0, 4));
list.add(Arrays.asList(-4, 0, 4));
list.add(Arrays.asList(-4, 0, 4));

List<List<Integer>> distinctLists = list.stream().distinct().collect(Collectors.toList());

System.out.println(distinctLists); // prints [[-5, 1, 4], [-5, 4, 1], [-4, 0, 4]]
0 голосов
/ 10 ноября 2019
As given in previous answer, create a list of list
List<List<Integer>> listToBeUpdated = new ArrayList<>();
list.add(Arrays.asList(-5, 1, 4));
list.add(Arrays.asList(-5, 1, 4));
list.add(Arrays.asList(-5, 4, 1));
list.add(Arrays.asList(-4, 0, 4));
list.add(Arrays.asList(-4, 0, 4));
list.add(Arrays.asList(-4, 0, 4)); 

Затем, Вы можете достичь этого, используя Set (как установлено, не допускайте дублирования). в Java 8:

    listToBeUpdated.stream().flatMap(List::stream).collect(Collectors.toSet())

Или вы можете просто:

    public List<Integer> removeDuplicatesFromList(List<List<Integer>> listToBeUpdated) {
        Set<Integer> uniqueList = new HashSet<Integer>();    //Use TreeSet<Integer>, for sorting order or LinkedHashSet<Integer> for insertion order
        for(List<Integer> anInt: list) {
            uniques.addAll(anInt);
        }
        return new ArrayList<>(uniqueList);   // If you want to return list
    }

Hope it helps !
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...