假设我们有一个名为 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