遍历记录乘积最大值即可。
由于存在负数,遍历时需要同时保存最大值和最小值,当当前遍历元素为负数时,之前保存的最大值和最小值交换。
public class Solution {
public int MaxProduct(int[] nums) {
int res = int.MinValue;
int a = 1;
int b = 1;
for(int i = 0; i < nums.Length; i++)
{
if(nums[i] < 0)
{
a = a + b;
b = a - b;
a = a - b;
}
a = a * nums[i] > nums[i] ? a*nums[i]:nums[i];
b = b * nums[i] < nums[i] ? b*nums[i]:nums[i];
res = a > res ? a : res;
}
return res;
}
}