给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
int maxProduct(int* nums, int numsSize){
int max=0x80000000,i=0,j=0,sum=1;
//方法1 暴力法
for(i=0;i<numsSize;i++){
sum=1;
for(j=i;j<numsSize;j++){
sum*=nums[j];
if(sum>max) max=sum;
}
}
//方法2 双指针 滑动窗口 以0为分界点
while(i<numsSize || j<numsSize){
if(j==numsSize || nums[j]==0){ //右指针遇到0 或者 右指针到头了 左指针开始收缩 (两个判断条件的先后顺序不能换)
while(i<j){
sum/=nums[i++]; //可以保证除数不为0
if(sum>max && i!=j) max=sum; //