Как лучше найти и вывести одинаковые элементы из двух списков?

88
21 марта 2021, 13:30

Дано два списка строками с целыми числами через пробел. Необходимо вывести уникальные элементы(1 раз - 1 элемент), которые присутствуют и в первом и во втором списке. Элементы необходимо вывести в порядке возрастания. Гарантируется что хотя бы 1 одинаковый элемент в списках есть.

    Пример_1
    Ввод:
    1 2 3 4 5 6 7 8 9 10
    7 8 1 1 1 11 1 1 1 11 1 1 11 1 1 1
    Вывод:
    1 7 8 
    Пример_2
    Ввод:
    0 0 0 0
    0 0 0 0 0 0 0
    Вывод:
    0

Написал код, и работает вроде все правильно, первый тест проходит, но почему-то все валится на втором тесте (на нулях). Помогите найти ошибку и поправить!

    Scanner sc = new Scanner(System.in);
    String a = sc.nextLine();
    String b = sc.nextLine();
    String[] a1 = a.split(" ");
    ArrayList<Integer> a2 = new ArrayList<>();
    for (int i = 0; i < a1.length; i++) {
        int x = Integer.parseInt(a1[i]);
        a2.add(x);
    }
    String[] b1 = b.split(" ");
    ArrayList<Integer> b2 = new ArrayList<>();
    for (int i = 0; i < b1.length; i++) {
        int x = Integer.parseInt(b1[i]);
        b2.add(x);
    }
    ArrayList<Integer> result = new ArrayList<>();
    for (int i = 0; i < a2.size(); i++) {
        Integer x = new Integer(0);
        for (int j = 0; j < b2.size(); j++) {
            for (int k = 0; k < result.size(); k++) {
                if (result.get(k) == b2.get(j)) {
                    b2.remove(j);
                    j--;
                    continue;
                }
            }
            if (a2.get(i) == b2.get(j)) {
                result.add(a2.get(i));
                b2.remove(j);
                if (j != 0) j--;
            }
        }
    }
    Collections.sort(result);
    for (int i = 0; i < result.size(); i++) {
        System.out.print(result.get(i) + " ");
    }
}
Answer 1
import java.util.Arrays;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Main {
    private final static Function<String, Set<Integer>> STRING_TO_SET = s -> 
            Arrays.stream(s.split(" "))
                .map(Integer::valueOf)
                .collect(Collectors.toCollection(TreeSet::new));
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Set<Integer> list1 = STRING_TO_SET.apply(sc.nextLine());
        STRING_TO_SET.apply(sc.nextLine()).stream()
                .filter(s -> list1.contains(s))
                .forEach(System.out::println);
    }
}
Answer 2
class Example {
    private static Scanner sc = new Scanner(System.in);
    private static Set<Integer> getInput() {
        return Stream.of(sc.nextLine().split(" "))
                     .map(Integer::valueOf)
                     .collect(Collectors.toSet());
    }
    public static void main(String[] args) {
        Set<Integer> a = getInput();
        Set<Integer> b = getInput();
        a.retainAll(b);
        String r = a.stream()
                    .sorted()
                    .map(Object::toString)
                    .collect(Collectors.joining(" "));
        System.out.println(r);
    }
}
Answer 3
Scanner scanner = new Scanner(System.in);
String[] s1 = scanner.nextLine().split(" ");
String[] s2 = scanner.nextLine().split(" ");
HashSet<String> set1 = new HashSet<>();
HashSet<String> set2 = new HashSet<>();
Collections.addAll(set1,s1);
Collections.addAll(set2,s2);
set1.stream()
    .filter(set2::contains)
    .map(Integer::valueOf)
    .sorted()
    .forEach(s -> System.out.print(s + " "));
READ ALSO
Как достать данные в int или в String из JSON (Java и json-simple)

Как достать данные в int или в String из JSON (Java и json-simple)

Есть JSONObject, и от туда я могу достать информацию только в переменную типа long При попытке прировнять значение из JSONObject к переменной типа int или...

107
Jsoup.connect() Получить документ полностью

Jsoup.connect() Получить документ полностью

Проблема в следующем: использую библиотеку Jsoup для парсинга HTML страниц, но загвоздка в том, что на некоторых страницах некоторые элементы...

113
Arrays.asList и Collections.addAll не работают с int [] array?

Arrays.asList и Collections.addAll не работают с int [] array?

вот так привести массив в List могу

104
Как сделать перезапуск spring?

Как сделать перезапуск spring?

Использую spring с docker-composeМне нужно чтобы при падении контейнера spring он перезапускался, определенное кол-во раз

85