乘积最大子序列

乘积最大子序列(难度:中等)

1
2

注意:不能只保存到当前为止的最大值,还需保存到当前为止的最小值,因为若下一个数是负数,那么以前的最小值(若为负数)会变成现在的最大值.

代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int maxProduct(int[] nums) {
int imax = nums[0], imin = nums[0];
int ans = nums[0];
for(int i = 1; i < nums.length; i++){
if(nums[i]<0){
int temp = imin;
imin = imax;
imax = temp;
}
imax = Math.max(imax*nums[i], nums[i]);
imin = Math.min(imin*nums[i], nums[i]);
ans = Math.max(ans,imax);
}
return ans;
}
}
3