trouver plus occurence de l'élément dans le tableau

Ici est simple programme pour trouver l'élément qui revient le plus souvent dans un tableau:

#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]) {
    int a[] = {1,2,3,4,4,4,5};
    int n = sizeof(a) / sizeof(int);
    int max = 0;
    int result = 0;
    int *b = new int[n];
    for (int i = 0;  i < n;  i++) {
        b[a[i]] = (b[a[i]] || 0) + 1;
        if (b[a[i]] > max) {
            max = b[a[i]];
            result = a[i];
        }
    }
    cout << result << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Mais il ne fonctionne pas; il imprime 1. Pourquoi?

Pouvez-vous garantir que le tableau est toujours triée selon votre exemple? Ou pouvez-vous garantir que toutes les occurrences d'un élément donné sera consécutives? Si oui, plus simple, plus rapide des algorithmes en O(1) de stockage supplémentaire existent.

OriginalL'auteur user457463 | 2010-09-26