乘积最大子序列(难度:中等)
注意:不能只保存到当前为止的最大值,还需保存到当前为止的最小值,因为若下一个数是负数,那么以前的最小值(若为负数)会变成现在的最大值.
代码
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; } }
|