码迷,mamicode.com
首页 > 其他好文 > 详细

LintCode-乘积最大子序列

时间:2015-05-15 22:55:22      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:lintcode   面试   

找出一个序列中乘积最大的连续子序列(至少包含一个数)。

样例

比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6

分析:访问到每个点的时候,以该点为子序列的末尾的乘积,要么是该点本身,要么是该点乘以以前一点为末尾的序列,注意乘积负负得正,故需要记录前面的最大最小值。

代码:

class Solution {
public:
    /**
     * @param nums: a vector of integers
     * @return: an integer
     */
    int maxProduct(vector<int>& nums) {
        // write your code here
        int posMax = nums[0];
        int negMax = nums[0];
        int ret = nums[0];
        for(int i=1;i<nums.size();i++)
        {
            int tempPosMax = posMax;
            int tempNegMax = negMax;
            posMax = max(nums[i],max(nums[i]*tempPosMax,nums[i]*tempNegMax));
            negMax = min(nums[i],min(nums[i]*tempPosMax,nums[i]*tempNegMax));
            ret = max(ret,posMax);
        }
        return ret;
    }
};


LintCode-乘积最大子序列

标签:lintcode   面试   

原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/45749687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!