乘积最大子序列-LintCode

来源:互联网 发布:linux查看版本命令 编辑:程序博客网 时间:2024/06/10 03:17

找出一个序列中乘积最大的连续子序列(至少包含一个数)。
样例:
比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。

#ifndef C191_H#define C191_H#include<iostream>#include<vector>using namespace std;class Solution {public:    /*    * @param nums: An array of integers    * @return: An integer    */    int maxProduct(vector<int> nums) {        // write your code here        if (nums.empty())            return 0;        int len = nums.size();        vector<int> maxPro(len);        vector<int> minPro(len);        maxPro[0] = nums[0];        minPro[0] = nums[0];        for (int i = 1; i < len; ++i)        {            maxPro[i] = maxVal(nums[i], maxVal(nums[i] * maxPro[i - 1], nums[i] * minPro[i - 1]));            minPro[i] = minVal(nums[i], minVal(nums[i] * maxPro[i - 1], nums[i] * minPro[i - 1]));        }        int sum = maxPro[0];        for (int i = 1; i<len; ++i)        {            if (sum<maxPro[i])                sum = maxPro[i];        }        return sum;    }    int maxVal(int a, int b)    {        return a>b ? a : b;    }    int minVal(int a, int b)    {        return a < b ? a : b;    }};#endif
原创粉丝点击