已解答
中等
给你一个整数数组 nums
,请你求出乘积为正数的最长子数组的长度。
一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
请你返回乘积为正数的最长子数组长度。
本题要求乘积为正数,而整数数组中存在正数和负数两种,因此需要分别用两个数组保存,一个用于保存前面是正数的最大长度(名字为pos),一个用来保存前面是负数的最大长度(名字是negpos),在面对第i个数字为正,负的情况时,若第i个是正,则pos[i]=pos[i-1]+1,negpos[i]=negpos[i-1]+1. 第i个是负数,则pos[i]=negpos[i-1]+1,negpos[i]=pos[i-1]+1.
递归求解即可
class Solution {
public:
int getMaxLen(vector<int>& nums) {
int n=nums.size();
vector<int>pos(n+1,0);
vector<int>negtive(n+1,0);
int j=0;
int sum=0;
for(int i=0;i<n;i++)
{
int num=nums[i];
if(num>0)
{
pos[i+1]=pos[i]+1;
if(negtive[i]!=0)
negtive[i+1]=negtive[i]+1;
}
else if(num<0)
{
negtive[i+1]=pos[i]+1;
if(negtive[i]!=0)
pos[i+1]=negtive[i]+1;
}
else
{
pos[i+1]=negtive[i+1]=0;
}
}
int ret=pos[0];
for(int i=1;i<=n;i++)
{
if(pos[i]>ret)
{
ret=pos[i];
}
}
return ret;
}
};