Необходимо определить какое число в массиве встречается чаще всего. Решение нужно оформить двумя способами

Первый способ это вернуть первый элемент, удовлетворяющий условиям задачи его реализация ниже. Второй способ это если чисел удовлетворяющих условию задачи несколько,то вернуть все элементы, удовлетворяющие условиям задачи, используя дополнительный массив.Помогите реализовать второй способ.

public static int frequentFistElement(int[] arr) {
        int maxFrequent = 0;
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            int frequent = 0;
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    frequent++;
                }
                if (frequent > maxFrequent) {
                    maxFrequent = frequent;
                    num = arr[i];
                }
            }
        }
        return num;
    }

Ответы (2 шт):

Автор решения: Sergei Buvaka

Ну напишите функцию вроде такой:

int[] array = new int[]{13, 5, 1, 2, 3, 3, 5, 6, 7, 8, 9};
    HashMap<Integer, Integer> map = new HashMap<>();

    for (Integer i : array) {
        Integer value = map.get(i);
        if (value == null) {
            map.put(i, 1);
        } else {
            map.put(i, ++value);
        }
    }

Где в Map первый Integer это ваш объект, второй - количество копий.

На выходе вы получите мапу в которой к каждому уникальному значению будет присвоено количество их в первоначальном массиве. А дальше с ними можно делать чо угодно

→ Ссылка
Автор решения: rhino_rus

Я обязан Вас предупредить - пожалуйста, если Вам в практике придется решать подобные задачи, то используйте в решении коллекции.

Вот мой вариант решения задачи с несколькими возможными элементами максимальной частоты.

public static void main(String[] args) {

    int[] numbers = {1, 2, 3, 4, 100, 101, 1, 2, 3};
    int[] result = getMostFrequentNumbers(numbers);
    System.out.println(Arrays.toString(result));
}

public static int[] getMostFrequentNumbers(int[] numbers){

    if(numbers.length > 0){

        int[] uniqueNumbers = new int[] { numbers[0] };

        // поиск всех уникальных элементов
        for(int i = 1; i < numbers.length; i++){
            int number = numbers[i];

            // если в массиве нет такого элемента, то расширяем массив и добавляем элемент в конец
            if(indexOf(uniqueNumbers, number) == -1){
                uniqueNumbers = Arrays.copyOf(uniqueNumbers, uniqueNumbers.length + 1);
                uniqueNumbers[uniqueNumbers.length - 1] = number;
            }
        }

        int[] counts = new int[uniqueNumbers.length];
        int max = 0;

        // считаем число вхождений для каждого уникального элемента.
        for(int number : numbers){
            int index = indexOf(uniqueNumbers, number);
            counts[index]++;

            if(counts[index] > max){
                max = counts[index];
            }
        }

        int[] result = new int[0];

        // забираем все элементы с максимальной частотой, расширяем результирующий массив
        for(int i = 0; i < counts.length; i++){
            if(counts[i] == max){
                result = Arrays.copyOf(result, result.length + 1);
                result[result.length - 1] = uniqueNumbers[i];
            }
        }

        return result;
    }

    // случай, когда во входном массиве нет элементов
    return new int[0];
}

// функция поиска индекса элемента в массиве
public static int indexOf(int[] array, int element){
    for(int i = 0; i < array.length; i++){
        if(array[i] == element){
            return i;
        }
    }
    return -1;
}
→ Ссылка