Senior
İki dosya var, her biri satır satır tam sayı değerleri içeriyor. Bu iki kümenin kesişimini bulmak için hangi algoritmalar kullanılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Для поиска пересечения двух множеств целочисленных значений из файлов можно использовать несколько подходов:
-
Считывание в множества (Set)
- Считать все значения из первого файла в HashSet.
- Считать значения из второго файла по одному и проверять наличие в первом множестве.
- Все совпадающие элементы — пересечение.
-
Сортировка и двухуказательный метод
- Считать оба файла в массивы.
- Отсортировать оба массива.
- Использовать два указателя для одновременного прохода по массивам и поиска общих элементов.
-
Использование потоков и фильтрации (Java 8+)
- Считать файлы как Stream<Integer>.
- Преобразовать один поток в Set для быстрого поиска.
- Отфильтровать второй поток по наличию в этом Set.
Пример с использованием HashSet:
import java.nio.file.*;
import java.io.IOException;
import java.util.*;
public class IntersectionFinder {
public static Set<Integer> findIntersection(Path file1, Path file2) throws IOException {
Set<Integer> set1 = new HashSet<>();
try (Stream<String> lines = Files.lines(file1)) {
lines.map(Integer::parseInt).forEach(set1::add);
}
Set<Integer> intersection = new HashSet<>();
try (Stream<String> lines = Files.lines(file2)) {
lines.map(Integer::parseInt)
.filter(set1::contains)
.forEach(intersection::add);
}
return intersection;
}
}
Этот метод эффективен при большом объёме данных, так как операции с HashSet имеют амортизированную сложность O(1).