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).

All Problems

All Solutions