Найти наиболее часто встречающийся элемент (наименьший, если возможно) и его вхождения в массиве целых чисел - PullRequest
0 голосов
/ 21 марта 2020

Проблемы: Найти 2 вещи

  • Самое большое вхождение в заданном несортированном целочисленном массиве
  • Элемент , который имеет наибольшее вхождение, и , если существует , более чем один элемент удовлетворяет (имеют такое же наибольшее вхождение ) результатом является наименьший элемент .

Пожалуйста, решайте проблемы максимально просто, не используйте указатели или какие-либо дополнительные контейнеры, такие как hashtable, pair или map (I Я довольно начинающий)

Например:

{1, 2, 8, 2, 5, 0, 5}

Ответ 2 и 2 (Элемент 2 и 5 оба встречаются дважды, но 2 является наименьшим)

Вот код, но он находит только право наивысшего вхождения.

int A[] = {1, 2, 8, 2, 5, 0, 5};
int N = 7;
    int maxCount = 0;
    int minMode = 0;
    for (int i = 0; i <= N - 1; i++) {
           int count = 0;
           for (int j = 0; j <= N - 1; j++) {
             if (A[i] == A[j])
                 count++;
       }
      if (count >= maxCount)
        {
            maxCount = count;
            minMode = A[i];
        }

     }
        cout << maxCount << " " << minMode << endl;

1 Ответ

0 голосов
/ 21 марта 2020

Это проблема O (n), но без использования структур она становится O (n²).

Вот простое решение O (n²):

int main(){    
    int A[7] = {1, 2, 8, 2, 5, 0, 5};
    int value, occurrences;
    int maxValue = 99999999, maxOccurrences = 0;
    for(int i = 0; i < 7; i++){
        value = A[i]; occurrences = 0;
        for(int j = 0; j < 7; j++) if(A[j] == value) occurrences++;
        if(occurrences > maxOccurrences){
            maxValue = value; maxOccurrences = occurrences;
        }
        else if(occurrences == maxOccurrences){
            if(value < maxValue) {
                maxValue = value; 
                maxOccurrences = occurrences; 
            }
        }       
    }
    cout<<maxValue<<" occurs "<<maxOccurrences<<" times"<<endl;
}

Мы инициализируем maxValue очень большое число, просто чтобы помочь тому факту, что если два числа встречаются одинаковое количество раз, будет выбрано самое низкое.

Тогда мы просто повторяем и считаем.

Возможно Оптимизация: предположим, вы ищете 5 в массиве. Всегда вы находите 5, добавляете вхождение к сумме и устанавливаете значение массива на -1, поэтому, когда вы в конечном итоге начинаете с него, вы знаете, что это -1, и вы можете пропустить этот элемент.

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