152. Maximum Product Subarray

来源:互联网 发布:复杂网络应用实例 编辑:程序博客网 时间:2024/06/03 22:59

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.

思路:此题一看就是要用动态规划的方法求解,要求求出子连续数组的最大的乘积,正数乘积可为正数与正数,也可为负数与负数,故需要存储可能出现的负数相乘的最大值;

int maxProduct(vector<int>& nums) {    if (nums.size() == 0)return 0;    int maxpro = nums[0];    int maxposi = nums[0];    int minneg = nums[0];    for (int i = 1; i < nums.size(); i++){        int tempposi = maxposi;        int tempneg = minneg;        //在此最大的正数可为nums[i],也可为正数与nums[i](为正数)或负数与nums[i]为负数的正数乘积        maxposi = max(nums[i], max(tempposi * nums[i], tempneg * nums[i]));        minneg = min(nums[i], min(tempposi * nums[i], tempneg * nums[i]));        maxpro = max(maxpro, maxposi);    }    return maxpro;}
原创粉丝点击