Нахождение наиболее частотного числа в массиве - PullRequest
0 голосов
/ 15 февраля 2020

Используя следующее, я могу найти наиболее часто встречающееся целое число в массиве. Но следующий код не будет работать для нескольких сценариев ios. Как я могу исправить код внутри для l oop? Я хочу улучшить только этот подход.

class FindingMostFrequencyOccur {

    public static void main(String args[]) {
        int A[] = { 1, 2, 3, 3, 1, 3, 1};
        int M = 3; // Maximum Number in Array
        int result = findFrequency(M, A);
        System.out.println("Result "+result);
    }

    static int findFrequency(int M, int[] A) {
        int N = A.length;
        int[] count = new int[M + 1];
        for (int i = 0; i <= M; i++)
            count[i] = 0;
        int maxOccurence = 1;
        int index = -1;
        for (int i = 0; i < N; i++) {
            if (count[A[i]] > 0) {
                int tmp = count[A[i]];
                if (tmp > maxOccurence) {
                    maxOccurence = tmp;
                    index = i;
                }
                count[A[i]] = tmp + 1;
            } else {
                count[A[i]] = 1;
            }
        }
        return A[index];
    }
}

Можем ли мы улучшить эту линию

if (count[A[i]] > 0) {
                    int tmp = count[A[i]];
                    if (tmp > maxOccurence) {
                        maxOccurence = tmp;
                        index = i;
                    }
                    count[A[i]] = tmp + 1;
                } else {
                    count[A[i]] = 1;
                }

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Чтобы получить частоту m в a, используйте:

static int findFrequency(int m, int[] a) {
     return (int)IntStream.of(a).filter(i-> i==m).count();
}

Чтобы получить карту всех частот в a, используйте:

static Map<Integer, Integer> findFrequency(int[] a) {
     Map<Integer, Integer> m = new HashMap<>();
     IntStream.of(a).distinct().forEach(i->{
            m.put(i, findFrequency(i,a));
     });
     return m;
}
0 голосов
/ 15 февраля 2020

В этой логике c вы берете каждый элемент массива и находите количество повторений справа от него в массиве. Это дано local_frequency. Если это больше чем max_frequency, то это число в arr[i] сохраняется в number, а затем max_frequency сохраняет local_frequency

public static void main(String[] args)
{
    int[] arr = {1, 2, 3, 4, 3, 2, 1, 5, 5, 5, 4, 4, 3, 4};
    int result = findMostFrequent(arr);
    System.out.println(result + " is the most frequent number");
}

public static int findMostFrequent(int[] arr)
{
    int number = arr[0];
    int maxFrequency = 0;

    for(int i =0 ; i < arr.length; i++)
    {
        int local_frequency = 0;
        for(int j = i; j < arr.length; j++)
        {
            if(arr[i] == arr[j])
            local_frequency++;
        }

        if(local_frequency > maxFrequency)
        {
            number = arr[i];
            maxFrequency = local_frequency;
        }
    }

    return number;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...