2401. 最长优雅子数组

64 阅读1分钟

题目:
给你一个由  整数组成的数组 nums 。

如果 nums 的子数组中位于 不同 位置的每对元素按位 与(AND) 运算的结果等于 0 ,则称该子数组为 优雅 子数组。

返回 最长 的优雅子数组的长度。

子数组 是数组中的一个 连续 部分。

注意: 长度为 1 的子数组始终视作优雅子数组。

算法:
方法一:模拟
注意题意,是连续子数组,nums[i] 最长有30位数,那么我们暴力枚举即可。

func longestNiceSubarray(nums []int) int {
    cnt := 0
    for i, or := range nums {
        j := i - 1
        for ; j >= 0 && (nums[j] & or == 0); j -- {
            or = or | nums[j]
        }
        if i - j > cnt {
            cnt = i - j
        }
    }
    return cnt
}