LeetCode152:Maximum Product Subarray

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.

这道题是上面连续子数组和问题的扩展吧。很遗憾没做来出,状态都定义对了,但是状态转移方程没有写出来。 可以定义A[i]表示以i结尾的子数组的最大积,B[i]表示以i结尾的子数组的最小积。这里之所以要记录下最小积是为了预防两个负数相乘结果为正数这种情况。那么状态转移方程是: A[i+1]=max{nums[i],nums[i]*A[i],nums[i]*B[i]} B[i+1]=min(nums[i],nums[i]*A[i],nums[i]*B[i]) 编写代码时注意需要将A[i]或B[i]先保存成临时变量。 最开始时考虑根据nums[i]的正负来更新A[i]和B[i]的值,,但是没有准确认识到A[i]和B[i]的转移关系所以导致没有求出来。 runtime:8ms

class Solution {public:int maxProduct(vector<int>& nums) {int curMax=nums[0];int curMin=nums[0];int result=curMax;for(int i=1;i<nums.size();i++){int tmp=curMin;curMin=min(nums[i],min(nums[i]*curMax,nums[i]*curMin));curMax=max(nums[i],max(nums[i]*curMax,nums[i]*tmp));result=max(result,curMax);}return result;}};

接受失败,是我们不常听到或看到的一个命题,我们大都接受的是正面的教育,

LeetCode152:Maximum Product Subarray

相关文章:

你感兴趣的文章:

标签云: