Назад к вопросам
Иннотех
Middle+
6
List<Integer> getNonUnique(int[] one, int[] two) { Map<Integer, Integer> freqOne = new HashMap<>(); Map<Integer, Integer> freqTwo = new HashMap<>(); for (int num : one) { freqOne.put(num, freqOne.getOrDefault(num, 0) + 1); } for (int num : two) { freqTwo.put(num, freqTwo.getOrDefault(num, 0) + 1); } List<Integer> result = new ArrayList<>(); for (Integer key : freqOne.keySet()){ if (freqTwo.containsKey(key)) { result.add(key); } } return result; } //one [phone] //two 3 9 8 1 // result 1 3 //one [phone] //two 3 9 8 1 3 // result 1 3 3
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Данный метод getNonUnique находит общие элементы между двумя массивами one и two, учитывая количество повторений во втором массиве.
Алгоритм:
- Считаем частоту каждого числа в первом массиве
freqOne. - Считаем частоту каждого числа во втором массиве
freqTwo. - Проходим по ключам из
freqOneи если ключ есть вfreqTwo, добавляем его в результат.
Однако, в текущей реализации добавляется по одному экземпляру каждого общего числа, что не соответствует примеру с повторениями (например, для two = [3,9,8,1,3] результат должен содержать два раза 3).
Чтобы исправить это и получить результат с повторениями, нужно добавить в результат число столько раз, сколько оно встречается во втором массиве:
List<Integer> getNonUnique(int[] one, int[] two) {
Map<Integer, Integer> freqOne = new HashMap<>();
Map<Integer, Integer> freqTwo = new HashMap<>();
for (int num : one) {
freqOne.put(num, freqOne.getOrDefault(num, 0) + 1);
}
for (int num : two) {
freqTwo.put(num, freqTwo.getOrDefault(num, 0) + 1);
}
List<Integer> result = new ArrayList<>();
for (Integer key : freqOne.keySet()) {
if (freqTwo.containsKey(key)) {
int count = freqTwo.get(key);
for (int i = 0; i < count; i++) {
result.add(key);
}
}
}
return result;
}
Таким образом, метод возвращает список чисел из второго массива, которые также есть в первом, с учётом количества повторений во втором массиве.