Senior
Има два файла, всеки съдържащи цели числа по редове. С кои алгоритми може да се намери пресечната точка на тези две множества?
sobes.tech AI
Отговор от AI
За да намерите пресечната точка на две множества от цели числа от файлове, можете да използвате няколко подхода:
-
Четене в множества (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).