Chà, bạn có thể sử dụng XOR của l và r để tìm câu trả lời.
Giả sử, l = 4 và r = 6.
l = 100, r = 110 (tương đương nhị phân của các số này)
l⊕r = 0 10
Điều này có nghĩa là, giá trị tối đa bạn đang tìm kiếm chắc chắn sẽ có bit đầu tiên (MSB) là 0. (Hãy nghĩ về nó, thay vào đó, giá trị tối đa của bạn có thể có 1 trong bit đầu tiên không? Nếu đó là 01010 và 00101, xor sẽ có = 01 111 tức là giá trị tối đa trong khoảng từ 01010 đến 00101 chắc chắn sẽ có a 1 trong bit thứ hai của họ từ trái, không thể lấy 1 trước bit thứ hai từ trái tức là trong bit đầu tiên từ bên trái)
Vì vậy, bạn còn lại 2 bit còn lại để tìm mức tối đa. Chúng ta biết rằng giá trị tối đa có thể có khi chúng ta có n bit với chúng ta là = 2 n 1, do đó, câu trả lời trong trường hợp này sẽ là 2 2 -1 = 4-1 = 3.
Từ ví dụ trên, chúng ta có thể tạo ra một thuật toán chung cho việc này.
Bước 1. num = số bit cần thiết để biểu diễn max ( l , r )
Bước 2. res = l ⊕ r
Bước 3. pos = Vị trí của bit đầu tiên được đặt từ bên trái trong độ phân giải (lập chỉ mục dựa trên 0)
Bước 4. n = num - pos
Bước 5. ans = 2 n 1
Độ phức tạp thời gian = O (n)
j
chạy quai+1..r
vài
chạy qual...r-1
cho chính xác.