列表

详情


1567. 乘积为正数的最长子数组长度

给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。

一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。

请你返回乘积为正数的最长子数组长度。

 

示例  1:

输入:nums = [1,-2,-3,4]
输出:4
解释:数组本身乘积就是正数,值为 24 。

示例 2:

输入:nums = [0,1,-2,-3,-4]
输出:3
解释:最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6 。
注意,我们不能把 0 也包括到子数组中,因为这样乘积为 0 ,不是正数。

示例 3:

输入:nums = [-1,-2,-3,0,1]
输出:2
解释:乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3] 。

 

提示:

 

原站题解

去查看

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

golang 解法, 执行用时: 88 ms, 内存消耗: 9.9 MB, 提交时间: 2021-07-21 10:41:54

// 1567. 乘积为正数的最长子数组长度
func getMaxLen(nums []int) int {
	n := len(nums)
	positive, negative := 0, 0
	if nums[0] > 0 {
		positive = 1
	} else if nums[0] < 0 {
		negative = 1
	}
	maxLength := positive

	for i := 1; i < n; i++ {
		if nums[i] > 0 {
			positive++
			if negative > 0 {
				negative++
			} else {
				negative = 0
			}
		} else if nums[i] < 0 {
			if negative > 0 {
				positive, negative = negative + 1, positive + 1
			} else {
				positive, negative = 0, positive + 1
			}
		} else {
			positive = 0
			negative = 0
		}
		maxLength = max(maxLength, positive)
	}
	return maxLength
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

上一题