Sobes.tech
Назад к вопросам
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;
}

Таким образом, метод возвращает список чисел из второго массива, которые также есть в первом, с учётом количества повторений во втором массиве.