乘积最大子序列

来源:互联网 发布:linux安装db2 9.7 编辑:程序博客网 时间:2024/06/05 04:01

问题:

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

解题思路:

        该题是典型的动态规划问题,考虑到序列中存在负数的情况,需要定义两个辅助数组,一个存储以当前元素结尾的最大乘积,一个记录以当前元素结尾的最小乘积。

int maxProduct(vector<int>& nums) {        // write your code here        int size = nums.size();        if(size < 1)            return 0;//创建辅助数组,记录以当前元素结尾的最大乘积                    int *curmax = new int[size];        int *curmin = new int[size];        memset(curmax, 0, sizeof(int) * size);        memset(curmin, 0, sizeof(int) * size);//填充辅助数组                int maxnum = nums[0];        curmax[0] = nums[0];        curmin[0] = nums[0];        for(int i = 1; i < size; i++){            curmax[i] = max(nums[i], max(nums[i] * curmax[i - 1], nums[i] * curmin[i - 1]));            curmin[i] = min(nums[i], min(nums[i] * curmin[i - 1], nums[i] * curmax[i - 1]));            if(curmax[i] > maxnum){                maxnum = curmax[i];            }        }        return maxnum;    }


0 0