image.png

    1. class Solution {
    2. public int maxProduct(int[] nums) {
    3. //max变量记录全局最大值,imax和imin记录当前遍历位置的局部最大、最小值。
    4. //从数组第一个元素开始循环,若出现负数元素,交换imax和imin。
    5. int max=Integer.MIN_VALUE,imax=1,imin=1;
    6. for(int i=0;i<nums.length;i++){
    7. if(nums[i]<0){
    8. int temp=imax;
    9. imax=imin;
    10. imin=temp;
    11. }
    12. imax=Math.max(imax*nums[i],nums[i]); //当前最大值
    13. imin=Math.min(imin*nums[i],nums[i]); //当前最小值
    14. max=Math.max(max,imax); //全局最大值
    15. }
    16. return max;
    17. }
    18. }