Find the contiguous subarray within an array (containing at least one
number) which has the largest product.For example, given the array [2,3,-2,4], the contiguous subarray [2,3]
has the largest product = 6.Subscribe to see which companies asked this question.
思路一:
看到这个题应该想到动态规划,但是如何动态规划是一个值得深思的。。。。
int maxProduct(vector<int>& nums) {
int temp=nums[0],temp1=nums[0],maxn=nums[0],temp3;
//temp记录前面的最大值,temp1记录前面的最小值,maxn保存结果
for(int i=1;i<nums.size();i++)
{
temp3=temp;//和求最大子段和有异曲同工之妙
temp=(nums[i]>temp*nums[i])?((nums[i]>temp1*nums[i])?nums[i]:temp1*nums[i]):((temp*nums[i]>temp1*nums[i])?temp*nums[i]:temp1*nums[i]);
temp1=(nums[i]<temp3*nums[i])?((nums[i]<temp1*nums[i])?nums[i]:temp1*nums[i]):((temp3*nums[i]<temp1*nums[i])?temp3*nums[i]:temp1*nums[i]);
maxn=maxn>temp?maxn:temp;
}
return maxn;
}
思路二比较累但复杂度也是O(n),(未实践)
按照0,分隔这个段,在每个段里找有几个0,如果是奇数,则易知分别求两段(第一个以后到结尾和最后一个负数以前)和,比较;偶数则整段最大;然后比较每个0段。