• LeetCode Maximum Product Subarray 最大子序列积


    题意:给一个size大于0的序列,求最大的连续子序列之积。(有正数,负数,0)

    思路:正确分析这三种数。0把不同的可能为答案的子序列给隔开了,所以其实可以以0为分隔线将他们拆成多个序列来进行求积,这样就没有0了。

      接着是负数,负数如果遇到一个负数,可能反而比那个正数要大,所以正负数都要保存,遍历一次即可。在奇数个负数时,其实可能的只有2种:(1)包含最前面一个负数的序列(2)包含最后面一个负数的序列(当然不包含最前面1个,同理(1)也是)。

     1 class Solution {
     2 public:
     3     int maxProduct(vector<int>& nums) {
     4         int a=1, b=1, res=nums[0];
     5         for(int i=0; i<nums.size(); i++)
     6         {
     7             int t=a;
     8             a=max(b*nums[i],a*nums[i]); //a保存大的
     9             b=min(t*nums[i],b*nums[i]); //b保存小的
    10             res=max(res, a);
    11             //if(a<=0)    a=1;    //必须保证a大于0
    12             if(b>=0)    b=1;    //必须保证b小于0。为了不改变原值,只能为1。
    13         }
    14         return res;
    15     }
    16 };
    AC代码
  • 相关阅读:
    maven
    Antd@4.x Form的常用方法
    数组排序 js
    链式调用
    react 非登陆页面得公共部分配置方法
    react异常处理
    Field 输入框的bug
    promise的用法
    异步return公共数据方法,
    小程序打开pdf文件
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4672140.html
Copyright © 2020-2023  润新知