2568. Minimum Impossible OR
Description
You are given a 0-indexed integer array nums
.
We say that an integer x is expressible from nums
if there exist some integers 0 <= index1 < index2 < ... < indexk < nums.length
for which nums[index1] | nums[index2] | ... | nums[indexk] = x
. In other words, an integer is expressible if it can be written as the bitwise OR of some subsequence of nums
.
Return the minimum positive non-zero integer that is not expressible from nums
.
Example 1:
Input: nums = [2,1] Output: 4 Explanation: 1 and 2 are already present in the array. We know that 3 is expressible, since nums[0] | nums[1] = 2 | 1 = 3. Since 4 is not expressible, we return 4.
Example 2:
Input: nums = [5,3,2] Output: 1 Explanation: We can show that 1 is the smallest number that is not expressible.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 109
Solutions
Solution 1: Enumerate Powers of 2
We start from the integer \(1\). If \(1\) is expressible, it must appear in the array nums
. If \(2\) is expressible, it must also appear in the array nums
. If both \(1\) and \(2\) are expressible, then their bitwise OR operation \(3\) is also expressible, and so on.
Therefore, we can enumerate the powers of \(2\). If the currently enumerated \(2^i\) is not in the array nums
, then \(2^i\) is the smallest unexpressible integer.
The time complexity is \(O(n + \log M)\), and the space complexity is \(O(n)\). Here, \(n\) and \(M\) are the length of the array nums
and the maximum value in the array nums
, respectively.
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|