##### Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/2419.html

# 2419. Longest Subarray With Maximum Bitwise AND

• Difficulty: Medium.
• Related Topics: .
• Similar Questions: Number of Different Integers in a String, Remove Colored Pieces if Both Neighbors are the Same Color, Count Number of Maximum Bitwise-OR Subsets, Smallest Subarrays With Maximum Bitwise OR.

## Problem

You are given an integer array nums of size n.

Consider a non-empty subarray from nums that has the maximum possible bitwise AND.

• In other words, let k be the maximum value of the bitwise AND of any subarray of nums. Then, only subarrays with a bitwise AND equal to k should be considered.

Return the length of the **longest such subarray**.

The bitwise AND of an array is the bitwise AND of all the numbers in it.

A subarray is a contiguous sequence of elements within an array.

Example 1:

Input: nums = [1,2,3,3,2,2]
Output: 2
Explanation:
The maximum possible bitwise AND of a subarray is 3.
The longest subarray with that value is [3,3], so we return 2.


Example 2:

Input: nums = [1,2,3,4]
Output: 1
Explanation:
The maximum possible bitwise AND of a subarray is 4.
The longest subarray with that value is [4], so we return 1.


Constraints:

• 1 <= nums.length <= 10^5

• 1 <= nums[i] <= 10^6

## Solution (Java, C++, Python)

• class Solution {
public int longestSubarray(int[] nums) {
int mx = 0;
for (int v : nums) {
mx = Math.max(mx, v);
}
int ans = 0, cnt = 0;
for (int v : nums) {
if (v == mx) {
++cnt;
ans = Math.max(ans, cnt);
} else {
cnt = 0;
}
}
return ans;
}
}

• class Solution {
public:
int longestSubarray(vector<int>& nums) {
int mx = *max_element(nums.begin(), nums.end());
int ans = 0, cnt = 0;
for (int v : nums) {
if (v == mx) {
++cnt;
ans = max(ans, cnt);
} else {
cnt = 0;
}
}
return ans;
}
};

• class Solution:
def longestSubarray(self, nums: List[int]) -> int:
mx = max(nums)
ans = cnt = 0
for v in nums:
if v == mx:
cnt += 1
ans = max(ans, cnt)
else:
cnt = 0
return ans


• func longestSubarray(nums []int) int {
mx := 0
for _, v := range nums {
mx = max(mx, v)
}
ans, cnt := 0, 0
for _, v := range nums {
if v == mx {
cnt++
ans = max(ans, cnt)
} else {
cnt = 0
}
}
return ans
}

func max(a, b int) int {
if a > b {
return a
}
return b
}


Explain:

nope.

Complexity:

• Time complexity : O(n).
• Space complexity : O(n).