列表

详情


2419. 按位与最大的最长子数组

给你一个长度为 n 的整数数组 nums

考虑 nums 中进行 按位与(bitwise AND)运算得到的值 最大非空 子数组。

返回满足要求的 最长 子数组的长度。

数组的按位与就是对数组中的所有数字进行按位与运算。

子数组 是数组中的一个连续元素序列。

 

示例 1:

输入:nums = [1,2,3,3,2,2]
输出:2
解释:
子数组按位与运算的最大值是 3 。
能得到此结果的最长子数组是 [3,3],所以返回 2 。

示例 2:

输入:nums = [1,2,3,4]
输出:1
解释:
子数组按位与运算的最大值是 4 。 
能得到此结果的最长子数组是 [4],所以返回 1 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int longestSubarray(vector<int>& nums) { } };

golang 解法, 执行用时: 104 ms, 内存消耗: 9.4 MB, 提交时间: 2022-11-23 10:54:32

func longestSubarray(nums []int) (ans int) {
	max, cnt := 0, 0
	for _, x := range nums {
		if x > max {
			max, ans, cnt = x, 1, 1
		} else if x < max {
			cnt = 0
		} else if cnt++; cnt > ans {
			ans = cnt
		}
	}
	return
}

python3 解法, 执行用时: 112 ms, 内存消耗: 25.6 MB, 提交时间: 2022-11-23 10:53:50

class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        ans = mx = cnt = 0
        for x in nums:
            if x > mx:
                mx = x
                ans = cnt = 1
            elif x == mx:
                cnt += 1
                if cnt > ans:
                    ans = cnt
            else:
                cnt = 0
        return ans

python3 解法, 执行用时: 160 ms, 内存消耗: 25.7 MB, 提交时间: 2022-11-23 10:52:59

class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        '''
        思路:按位与不会让数字变大,所以子数组最大按位与结果就是数字中最大的数字
        于是问题转化为求最大值的最长连续个数
        '''
        mx = max(nums)
        ans = cnt = 0
        for x in nums:
            if x == mx:
                cnt += 1
                ans = max(ans, cnt)
            else:
                cnt = 0
        return ans

上一题