C'era una domanda simile qui, su StackOverflow, ma non riesco a trovarla.
Consente di utilizzare 3 invece di 15, perché sarà più semplice e penso che sia completamente equivalente. La sequenza sarà 4, 5, 4, 5, 3, 3, 4, 5
, in binario 100, 101, 100, 101, 11, 11, 100, 101
.
È possibile effettuare le seguenti operazioni: somma di tutti i valori in bit meno significativo di numeri e prendere parte restante più di 3 (15 in origine):
bit1 = (0 + 1 + 0 + 1 + 1 + 1 + 0 + 1) % 3 = 5 % 3 = 2 != 0
se è != 0
allora che bit è uguale a 1 in numero che stiamo cercando di trovare. Ora consente di passare alla successiva:
bit2 = (0 + 0 + 0 + 0 + 1 + 1 + 0 + 0) % 3 = 2 % 3 = 2 != 0
bit3 = (1 + 1 + 1 + 1 + 0 + 0 + 1 + 1) % 3 = 6 % 3 = 0 == 0
Così abbiamo bit3 == 0, bit2 != 0, bit1 != 0
, rendendo 011
. Converti in decimale: 3
.
La complessità spaziale è O(1)
e complessità temporale è O(n * BIT_LENGTH_OF_VARS)
, dove BIT_LENGTH_OF_VARS == 8
per byte, BIT_LENGTH_OF_VARS == 32
per int, ecc Così può essere grande, ma le costanti non influenzano il comportamento asintotico e O(n * BIT_LENGTH_OF_VARS)
è davvero O(n)
.
Questo è tutto!
Ah, stavo per dire hash-table! :) – leppie
@leppie se si desidera avere hashtable che avrà garantito 'O (1)' sarà '2^32' di dimensioni che è delirante. in caso contrario non è possibile premere 'O (n)' – Andrey
Duplicato di http://stackoverflow.com/questions/3963409/interview-question-dealing-with-m-occurrences-among-n – Nabb