LeetCode Entry

2419. Longest Subarray With Maximum Bitwise AND

30.07.2025 medium 2025 kotlin rust

Longest max OR subarray

2419. Longest Subarray With Maximum Bitwise AND medium blog post substack youtube 1.webp

Join me on Telegram

https://t.me/leetcode_daily_unstoppable/1065

Problem TLDR

Longest max OR subarray #medium #counting

Intuition

    // 011
    // 010
    // 111
    // 100

Each new element decreases OR, consider only equal values.

Approach

  • longest subarray of maxes
  • many one-liners possible
  • 09/2024 - 13 minutes, 07/2025 - 10 minutes

Complexity

  • Time complexity: \(O(n)\)

  • Space complexity: \(O(1)\)

Code


// 43ms
    fun longestSubarray(n: IntArray, m: Int = n.max()) =
        n.runningFold(0) { l, x -> if (x == m) l + 1 else 0 }.max()


// 4ms
    fun longestSubarray(n: IntArray): Int {
        var m = 0; var r = 0; var l = 0
        for (x in n) if (x > m) { m = x; r = 1; l = 1 }
            else if (x < m) l = 0 else r = max(r, ++l)
        return r
    }


// 0ms
    pub fn longest_subarray(n: Vec<i32>) -> i32 {
        n.into_iter().dedup_with_count()
        .max_by_key(|&d| (d.1, d.0)).unwrap().0 as _
    }


// 1ms
    int longestSubarray(vector<int>& n) {
        int r = 0;
        for (int l = 0, m = 0; int x: n)
            x > m ? m = x, l = 1, r = 1 :
            x < m ? l = 0 : r = max(r, ++l);
        return r;
    }


// 36ms
    def longestSubarray(self, n: List[int]) -> int:
        m=max(n);return max(sum(1for _ in g) for x, g in groupby(n) if x==m)