首页 > 其他分享 >滑动窗口-区间长度最大值-6169. 最长优雅子数组

滑动窗口-区间长度最大值-6169. 最长优雅子数组

时间:2022-09-04 15:24:03浏览次数:69  
标签:curr 48 nums 最大值 优雅 6169 数组 长度 滑动

问题描述

给你一个由 正 整数组成的数组 nums 。
如果 nums 的子数组中位于 不同 位置的每对元素按位 与(AND)运算的结果等于 0 ,则称该子数组为 优雅 子数组。、
返回 最长 的优雅子数组的长度。
子数组 是数组中的一个 连续 部分。
注意:长度为 1 的子数组始终视作优雅子数组。

示例 1:
输入:nums = [1,3,8,48,10]
输出:3
解释:最长的优雅子数组是 [3,8,48] 。子数组满足题目条件:

  • 3 AND 8 = 0
  • 3 AND 48 = 0
  • 8 AND 48 = 0
    可以证明不存在更长的优雅子数组,所以返回 3 。
    示例 2:
    输入:nums = [3,1,5,11,13]
    输出:1
    解释:最长的优雅子数组长度为 1 ,任何长度为 1 的子数组都满足题目条件。

提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109

问题求解

子数组长度最值可以通过滑动窗口解决。
比赛时用的二分,但是tle,时间复杂度没有问题,应该是本题对时间卡的比较严格,非O(n)的解不会给过。

class Solution:
    def longestNiceSubarray(self, nums: List[int]) -> int:
        n = len(nums)
        res = 1
        l = 0
        curr = 0
        for r in range(n):
            while curr & nums[r] != 0:
                curr -= nums[l]
                l += 1
            curr += nums[r]
            res = max(res, r - l + 1)
        return res

标签:curr,48,nums,最大值,优雅,6169,数组,长度,滑动
From: https://www.cnblogs.com/hyserendipity/p/16655160.html

相关文章