lletcode 152. 乘积最大子数组 思路题

tech2024-06-21  74

你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

 

示例 1:

输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:

输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

 

因为存在负数的问题,因此不能完全依赖于上一个值。

所以维护两个变量,之前的最大值和最下值。 

如果当前num<0,那么我们求最大值max时,应该用之前的最小值。反之同理

class Solution {

public:

   int maxProduct(vector<int>& nums) {

      int shuchu=INT_MIN;

      int minn=1,maxx=1;

      for(int i=0;i<nums.size();i++)

      {

          if(nums[i]<0)

          {

              int z=minn;

              minn=maxx;

              maxx=z;

          }

          maxx=max(nums[i],maxx*nums[i]);

          minn=min(nums[i],minn*nums[i]);

          shuchu=max(shuchu,maxx);

      }

      return shuchu;

    }

};

最新回复(0)