检查具有给定产品的子数组是否存在于 Python 中的数组中

假设我们有一个名为 nums 的数组,它包含正数和负数。我们还有另一个值 k。我们必须检查任何乘积为 k 的子数组是否存在于数组中。

因此,如果输入类似于 nums = [-2,-1,1,3,5,8], k = 6,则输出将为 True,因为子数组为 [-2,-1,3]

为了解决这个问题,我们将按照以下步骤操作 -

  • 最小值:= nums[0],最大值:= nums[0]

  • prod_max := nums[0]

  • 对于范围 1 到 nums - 1 大小的 i,请执行

    • 返回真

    • 交换最大值和最小值

    • 如果 nums[i] < 0,则

    • 最大值 := nums[i] 和 (maximum * nums[i]) 的最大值

    • 最小值 := nums[i] 和 (minimum * nums[i]) 的最小值

    • 如果最小值或最大值与 k 相同,则

    • prod_max := prod_max 和最大值的最大值

    • 返回错误

    让我们看看以下实现以获得更好的理解 -

    示例代码

    def solve(nums, k):
       minimum = nums[0]
       maximum = nums[0]
     
       prod_max = nums[0]
     
       for i in range( 1, len(nums)):
          if nums[i] < 0:
             maximum, minimum = minimum, maximum
    
          maximum = max(nums[i], maximum * nums[i])
          minimum = min(nums[i], minimum * nums[i])
    
          if minimum == k or maximum == k:
             return True
     
          prod_max = max(prod_max, maximum)
       return False
    
    nums = [-2,-1,1,3,5,8]
    k = 6
    print(solve(nums, k))

    输入

    [-2,-1,1,3,5,8], 6
    输出结果
    True

    猜你喜欢