Pagini recente » Diferente pentru rotatie-lexicografic-minima intre reviziile 38 si 34 | Diferente pentru rotatie-lexicografic-minima intre reviziile 38 si 26 | Diferente pentru girls-programming-camp-2011/parteneri-media intre reviziile 13 si 8 | Diferente pentru preoni-2005/runda-3/solutii intre reviziile 21 si 18 | Diferente pentru problema-majoritatii-votului intre reviziile 11 si 12
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.