[LeetCode] 152. Maximum Product Subarray

来源:互联网 发布:nginx grpc 编辑:程序博客网 时间:2024/05/02 02:29

思路:
类似动态规划的思路. 一个变量记录当前最大乘积, 一个记录最小的, 记录最小的是因为有可能负负得正直接小的就变成大的了. 然后遍历输入向量, 如果当前数字是负数, 咱们就交换最大乘积和最小乘积, 然后更新最大值和最小值. 对于最大值的更新规则是, 新的乘积如果大于等于原乘积, 那就保留, 否则就舍弃原来的结果, 直接用当前遍历到的那个数即可. 最小值相同的思路.

int maxProduct(vector<int>& nums) {    if (nums.empty())        return 0;    int maxProd = nums[0];    int minProd = nums[0];    int res = nums[0];    for (int i = 1; i < nums.size(); i++) {        if (nums[i] < 0)            swap(maxProd, minProd);        maxProd = max(maxProd * nums[i], nums[i]);        minProd = min(minProd * nums[i], nums[i]);        res = max(res, maxProd);    }    return res;}
0 0