#java #массивы
long[] a = new long[]{45017,96741,11751,23772,58825}; long[] b = new long[]{23772,88781,23777}; Как 2 массива объединить в один, чтобы в новом (третьем) массиве были только совпадающие элементы, в данном случае 23772 ?
Ответы
Ответ 1
Как вариант: private static ListasList(long[] array) { List res = new ArrayList<>(array.length); for (long l : array) { res.add(l); } return res; } public static void main(String[] args) { long[] a = new long[]{45017,96741,11751,23772,58825}; long[] b = new long[]{23772,88781,23777}; List cList = asList(a); cList.retainAll(asList(b)); System.out.println(cList); } Ответ 2
На Java-8: long[] result = LongStream.concat(Arrays.stream(a), Arrays.stream(b)).distinct().toArray();Ответ 3
Вот решение с временной сложностью O(m + n): private static Long[] getIntersection (long[] a, long[] b) { HashSetaSet = new HashSet<>(), bSet = new HashSet<>(); for(int i = 0; i < a.length; i++) { aSet.add(a[i]); } for(int i = 0; i < b.length; i++) { bSet.add(b[i]); } ArrayList intersection = new ArrayList<>(); for(Long l : aSet) { if(bSet.contains(l)) { intersection.add(l); } } return intersection.toArray(new Long[]{}); } Ответ 4
В верхнем цикле пробегайтесь по элементам 1-го массива Во внутреннем цикле сравнивайте элемент 1-го массива со всеми элементами второго до тех пор пока не будет совпадения. При совпадении помещайте совпавший элемент в список. Список преобразуйте в массив.
Комментариев нет:
Отправить комментарий