3125. Maximum Number That Makes Result of Bitwise AND Zero π
Description
Given an integer n, return the maximum integer x such that x <= n, and the bitwise AND of all the numbers in the range [x, n] is 0.
Example 1:
Input: n = 7
Output: 3
Explanation:
The bitwise AND of [6, 7] is 6.
The bitwise AND of [5, 6, 7] is 4.
The bitwise AND of [4, 5, 6, 7] is 4.
The bitwise AND of [3, 4, 5, 6, 7] is 0.
Example 2:
Input: n = 9
Output: 7
Explanation:
The bitwise AND of [7, 8, 9] is 0.
Example 3:
Input: n = 17
Output: 15
Explanation:
The bitwise AND of [15, 16, 17] is 0.
Constraints:
1 <= n <= 1015
Solutions
Solution 1: Bit Manipulation
Thinking
We need the largest \(x\le n\) such that \(x\) AND \(x+1\) is \(0\). Trying \(n-1,n-2,\ldots\) is linear in the worst case.
\(x\) and \(x+1\) are consecutive, so their AND vanishes only when \(x\) is a string of low ones. The largest such value below \(n\) is the mask under \(n\)'s highest bit.
Return \(2^{\textit{bit\_length}(n)-1}-1\). It ANDs with its successor to zero and is maximal under \(n\).
We can find the highest bit of \(1\) in the binary representation of \(n\). The maximum \(x\) must be less than \(n\) and this bit is \(0\), and all other lower bits are \(1\), i.e., \(x = 2^{\textit{number of the highest bit}} - 1\). This is because \(x \textit{ and } (x + 1) = 0\) must hold.
The time complexity is \(O(\log n)\), and the space complexity is \(O(1)\).
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 | |
1 2 3 | |