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