具有最大按位与的最长子数组

问题描述 投票:0回答:1

这是基于 LeetCode (#2419) 的一个问题 具有最大按位与的最长子数组

我不关心与问题相关的逻辑(我需要找到最大元素的最长链(数组的最大值))。这是我的解决方案 -

    max_index = nums.index(max(nums))
    max_val = max(nums)
    ans, temp = 1, 1
    for i in range(max_index+1, len(nums)):
        if (nums[i]==max_val):
            temp+=1
        else:
            ans = max(ans, temp)
            temp=1
    ans = max(ans, temp)
    return ans

在数组长度相当大的测试用例之一中,这给我带来了错误的答案 - enter image description here

预期的答案是 125,而我的代码获取的答案是 126。我的代码可能存在什么问题,导致它在大型测试用例中失败?我觉得我已经考虑了所有可能的边缘情况(数组末尾的最大元素链、等长链等)

python-3.x algorithm data-structures bitwise-and
1个回答
1
投票

更新问题中的代码

def longestSubarray(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    max_index = nums.index(max(nums))
    max_val = max(nums)
    ans, temp = 1, 1
    for i in range(max_index+1, len(nums)):
        if (nums[i]==max_val):
            temp+=1
            ans = max(ans, temp)
        else:
            temp=0
    return ans

方法

  1. 找出数组中的最大值
  2. 遍历数组,计算等于#1中找到的最大值的连续元素

如果可以这样做的话就可以简化

def longestSubarray(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    max_val = max(nums)
    ans, temp = 0, 0
    for num in nums:
        if (num==max_val):
            temp+=1
            ans = max(ans, temp)
        else:
            temp=0
    return ans
© www.soinside.com 2019 - 2024. All rights reserved.