Hard
Given an array of integers nums
and an integer k
, return the number of subarrays of nums
where the bitwise AND
of the elements of the subarray equals k
.
Example 1:
Input: nums = [1,1,1], k = 1
Output: 6
Explanation:
All subarrays contain only 1’s.
Example 2:
Input: nums = [1,1,2], k = 1
Output: 3
Explanation:
Subarrays having an AND
value of 1 are: [**1**,1,2]
, [1,**1**,2]
, [**1,1**,2]
.
Example 3:
Input: nums = [1,2,3], k = 2
Output: 2
Explanation:
Subarrays having an AND
value of 2 are: [1,**2**,3]
, [1,**2,3**]
.
Constraints:
1 <= nums.length <= 105
0 <= nums[i], k <= 109
public class Solution {
public long countSubarrays(int[] nums, int k) {
long ans = 0;
int left = 0;
int right = 0;
for (int i = 0; i < nums.length; i++) {
int x = nums[i];
for (int j = i - 1; j >= 0 && (nums[j] & x) != nums[j]; j--) {
nums[j] &= x;
}
while (left <= i && nums[left] < k) {
left++;
}
while (right <= i && nums[right] <= k) {
right++;
}
ans += right - left;
}
return ans;
}
}