Sobes.tech
Назад к вопросам
Senior
5

Для массива чисел arr и числа k Необходимо вернуть новый массив, число повторяющихся элементов которого не > k Пример: Input: arr=[1,1,1,2,3,3,3,4,4], k=3 Output: res=[1,3,4]

Компании, где спрашивали
Ozon ФинтехOzon Финтех

Ответ от нейросети

sobes.tech AI

Чтобы получить новый массив, в котором число повторяющихся элементов не больше k, нужно отфильтровать исходный массив, оставив только те элементы, которые встречаются не более k раз.

Пример решения на Java:

import java.util.*;

public class FilterArray {
    public static List<Integer> filterByFrequency(int[] arr, int k) {
        Map<Integer, Integer> freqMap = new HashMap<>();
        for (int num : arr) {
            freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);
        }

        List<Integer> result = new ArrayList<>();
        for (Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {
            if (entry.getValue() <= k) {
                result.add(entry.getKey());
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] arr = {1,1,1,2,3,3,3,4,4};
        int k = 3;
        List<Integer> res = filterByFrequency(arr, k);
        System.out.println(res); // Выведет [2, 4]
    }
}

В вашем примере Output: [1,3,4] — это значит, что элементы с количеством повторений не больше k=3 остаются. В массиве 1 встречается 3 раза, 3 — 3 раза, 4 — 2 раза, 2 — 1 раз. Если нужно именно вернуть элементы, которые встречаются ровно k раз, то условие меняется.

Если же нужно вернуть элементы, которые встречаются ровно k раз, то условие entry.getValue() == k.

Если нужно вернуть элементы, которые встречаются не меньше k раз, то entry.getValue() >= k.

В вашем примере, чтобы получить [1,3,4], нужно вернуть элементы, которые встречаются не меньше k=2 раз, например:

if (entry.getValue() >= 2) {
    result.add(entry.getKey());
}

Поясните, пожалуйста, точное условие, если нужно другое поведение.