Nah, Anda bisa menggunakan XOR dari l dan r untuk menemukan jawabannya.
Misalkan, l = 4 dan r = 6.
l = 100, r = 110 (setara biner dari angka-angka ini)
lr = 0 10
Artinya, nilai maksimum yang Anda cari pasti akan memiliki bit pertama (MSB) sebagai nol. (Pikirkan tentang itu, mungkinkah nilai maksimum Anda memiliki 1 pada bit pertama? Jika itu 01010 dan 00101, xor akan menjadi = 01 111 yaitu nilai maksimum antara 01010 dan 00101 pasti akan memiliki a 1 di bit kedua mereka dari kiri, itu tidak mungkin untuk mendapatkan 1 sebelum bit kedua dari kiri yaitu di bit pertama dari kiri)
Jadi, Anda memiliki 2 bit yang tersisa untuk menemukan maksimum. Kita tahu, bahwa nilai maksimum yang mungkin ketika kita memiliki n bit bersama kita adalah = 2 n −1, oleh karena itu jawaban dalam kasus ini adalah 2 2 -1 = 4-1 = 3.
Dari contoh di atas, kita dapat membuat algoritma umum untuk ini.
Langkah 1. num = jumlah bit yang diperlukan untuk merepresentasikan max ( l , r )
Langkah 2. res = l ⊕ r
Langkah 3. pos = Posisi bit pertama yang ditetapkan dari kiri di res (pengindeksan berbasis 0)
Langkah 4. n = num - pos
Langkah 5. ans = 2 n −1
Kompleksitas waktu = O (n)
j
menjalankan melaluii+1..r
dani
menjalankan melaluil...r-1
untuk menjadi tepat.