Back to all solutions
#2411 - Smallest Subarrays With Maximum Bitwise OR
Problem Description
You are given a 0-indexed array nums of length n, consisting of non-negative integers. For each index i from 0 to n - 1, you must determine the size of the minimum sized non-empty subarray of nums starting at i (inclusive) that has the maximum possible bitwise OR.
- In other words, let Bij be the bitwise OR of the subarray nums[i...j]. You need to find the smallest subarray starting at i, such that bitwise OR of this subarray is equal to max(Bik) where i <= k <= n - 1.
The bitwise OR of an array is the bitwise OR of all the numbers in it.
Return an integer array answer of size n where answer[i] is the length of the minimum sized subarray starting at i with maximum bitwise OR.
A subarray is a contiguous non-empty sequence of elements within an array.
Solution
/**
* @param {number[]} nums
* @return {number[]}
*/
var smallestSubarrays = function(nums) {
const n = nums.length;
const result = new Array(n).fill(1);
const bitPositions = new Array(32).fill(0);
for (let i = n - 1; i >= 0; i--) {
for (let bit = 0; bit < 32; bit++) {
if (nums[i] & (1 << bit)) {
bitPositions[bit] = i;
}
}
let maxIndex = i;
for (let bit = 0; bit < 32; bit++) {
maxIndex = Math.max(maxIndex, bitPositions[bit]);
}
result[i] = maxIndex - i + 1;
}
return result;
};