글쎄, 당신은 l 과 r 의 XOR을 사용 하여 답을 찾을 수 있습니다.
l = 4이고 r = 6이라고 가정하자.
l = 100, r = 110 (이 숫자의 이진 등가)
l⊕r = 0 10
이것이 의미하는 바는 찾고자하는 최대 값이 첫 번째 비트 (MSB)를 확실히 0으로합니다. 최대 값이해야하는 (그것도 가능하며, 그것에 대해 생각 하나를 대신 첫 번째 비트에가의 XOR을했을 = 01010 및 00101 있었다면? 01 (111), 즉 최대. 값 01010과 00101 사이 확실히해야합니다 왼쪽에서 두 번째 비트 의 1 , 왼쪽 에서 두 번째 비트 이전 에 1 을 얻을 수 없습니다 ( 예 : 왼쪽에서 첫 번째 비트)
따라서 최대 값을 찾기 위해 나머지 2 비트가 남습니다. 우리 와 함께 n 비트를 가질 때 가능한 최대 값 은 = 2 n -1이므로이 경우의 대답은 2 2 -1 = 4-1 = 3입니다.
위의 예에서 일반적인 알고리즘을 만들 수 있습니다.
1 단계. num = max ( l , r ) 를 나타내는 데 필요한 비트 수
단계 2. res = l ⊕ r
단계 3. pos = res 에서 왼쪽에서 설정되는 첫 번째 비트의 위치 (0 기반 인덱싱)
단계 4. n = 개수 - 위치
단계 5. ans = 2 n -1
시간 복잡도 = O (n)
j를 통해 실행i+1..r과i를 통해 실행l...r-1정확하게 할 수 있습니다.