Skip to content

Leetcode 2419. Longest Subarray With Maximum Bitwise AND #140

@Woodyiiiiiii

Description

@Woodyiiiiiii

这道题中,一开始看到subArray想到利用滑动窗口的方法,但问题是:

  1. 窗口左边界缩小时如何排除元素?&运算不可逆
  2. &运算最大值,多个数的&运算不会超过他们的最大值
  3. 题目暗示了先找到最大值

所以要冷静,逻辑思考

class Solution {
    public int longestSubarray(int[] nums) {
        int max = 0;
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < nums.length; ++i) {
            if (nums[i] > max) {
                list.clear();
                list.add(i);
                max = nums[i];
            } else if (nums[i] == max) {
                list.add(i);
            }
        }

        int result = 1;
        int len = 0;
        int prev = -1;
        for (Integer integer : list) {
            if (prev == -1 || integer == prev + 1) {
                ++len;
                result = Math.max(result, len);
            } else {
                len = 1;
            }
            prev = integer;
        }

        return result;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions