Beh, è possibile utilizzare la XOR di L e r per trovare la risposta.
Supponiamo che l = 4 e r = 6.
l = 100, r = 110 (equivalenti binari di questi numeri)
l⊕r = 0 10
Ciò significa che il valore massimo che stai cercando avrà sicuramente il suo primo bit (MSB) come zero. (Pensaci, è anche possibile che il tuo valore massimo abbia un 1 nel primo bit? Se fosse 01010 e 00101, lo xor sarebbe stato = 01 111, ovvero il valore massimo tra 01010 e 00101 avrà sicuramente un 1 nel loro secondo bit da sinistra, non è possibile ottenere un 1 prima del secondo bit da sinistra, cioè nel primo bit da sinistra)
Quindi, ti rimangono i restanti 2 bit per trovare il massimo. Sappiamo che il valore massimo possibile quando abbiamo n bit con noi è = 2 n −1, quindi la risposta in questo caso sarà 2 2 -1 = 4-1 = 3.
Dall'esempio sopra, possiamo creare un algoritmo generale per questo.
Passaggio 1. num = numero di bit richiesti per rappresentare max ( l , r )
Passaggio 2. res = l ⊕ r
Passaggio 3. pos = Posizione del primo bit impostato da sinistra in res (indicizzazione basata su 0)
Passaggio 4. n = num - pos
Passaggio 5. ans = 2 n −1
Complessità temporale = O (n)
j
passarei+1..r
ei
correrel...r-1
per essere precisi.