Pagini recente » Diferente pentru utilizator/tomescu_alin intre reviziile 40 si 42 | Diferente pentru utilizator/cezarmocan intre reviziile 17 si 16 | Monitorul de evaluare | Monitorul de evaluare | Diferente pentru problema-majoritatii-votului intre reviziile 12 si 11
Nu exista diferente intre titluri.
Diferente intre continut:
else return -1;
}
==
O altă idee de rezolvare porneşte de la observaţia următoare: Dacă există un element majoritar în şir, atunci ultima lui cifră va fi elementul majoritar în şirul format din ultimele cifre a numerelor din şirul iniţial. Această observaţie este valabilă pentru orice cifră a numerelor nu doar ultima. Astfel putem determina pentru fiecare a x-a cifră a numemerelor care este cifra majoritară şi apoi să punem cap la cap cifrele majoritare pentru a forma numărul majoritar. Evident putem să folosim orice bază, dacă folosim baza b şi valoarea maximă a unui număr ar fi k atunci algoritmul va avea complexitatea O(n log in baza b din k) şi foloseşte memorie suplimentară O(b * log in baza b din k). În practică putem considera acest algoritm ca fiind liniar. Să vedem o implementare a algoritmului pentru b = 1000 şi k = 999.999.999.
== code(cpp) |
int digitMajority(int n, int[] a) {
int[][] dig = new int[3][1000];
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.