maxSubArray vs. maxProduct

这两个问题类似,都可利用动态规划思想求解。

一、最大连续子序列和

https://leetcode.com/problems/maximum-subarray/description/

https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/

The core ideas are the same:

currentMax = max(nums[i], some_operation(currentMax, nums[i])).

For each element, we have 2 options: put it inside a consecutive subarray, or start a new subarray with it.

#include <vector>

int maxSubArray(std::vector<int>& nums)
{
    if (nums.empty())
    {
        return 0;
    }
    
    int currMax = nums[0]; int maxResult = nums[0]; int size = (int)nums.size(); for (int i = 1; i < size; ++i)
    {
        currMax = std::max(nums[i], currMax + nums[i]);
        maxResult = std::max(maxResult, currMax);
    }
    
    return maxResult;
}

二、最大连续子序列积

https://stackoverflow.com/questions/25590930/maximum-product-subarray

https://leetcode.com/problems/maximum-product-subarray/description/

https://www.geeksforgeeks.org/maximum-product-subarray/

https://www.geeksforgeeks.org/maximum-product-subarray-added-negative-product-case/

https://www.geeksforgeeks.org/maximum-product-subarray-set-2-using-two-traversals/

#include <vector>

int maxProduct(std::vector<int>& nums)
{
    if (nums.empty())
    {
        return 0;
    }
        
    int size = (int)nums.size();
        
    int currMax = nums[0];
    int currMin = nums[0];
    int maxResult = nums[0];
 
    for (int i = 1; i < size; ++i)
    {
        int t_currMax = currMax * nums[i];
        int t_currMin = currMin * nums[i];
            
        currMax = max(nums[i], max(t_currMax, t_currMin));
        currMin = min(nums[i], min(t_currMax, t_currMin));
        maxResult = max(maxResult, currMax);
    }
        
    return maxResult;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,024评论 2 36
  • wifi 破解笔记 wifi:密码的配置步骤首先插入无线网卡,进行如下操作,如图: step1: 查看网络网卡信息...
    不吃鱼的猫_de06阅读 1,903评论 0 12
  • 1.发现自己做起专业也非常棒的,只要想做就能出理想结果. 2.原来事情是可以解决的,而不是在事情里出不来!这是今天...
    德灏美学Sarah阅读 82评论 0 1
  • 三连十二班 张正浩学员,你很聪明,活泼和开朗。我们都相信今天小小的付出换来明天的收获,希望你继续努力,不要被眼前的...
    起个好的名字阅读 344评论 1 0
  • 2019.1.8 天气晴 今天又是快乐的一天啊!一天都是数学课 我就困了一天┐(´-`)┌ 中午爸爸带我们去买好吃...
    以沫0阅读 197评论 0 0