lc 152. 乘积最大子数组

    科技2023-09-10  116

    class Solution { // 因为是乘法,如果都是正整数,那么结果只会越乘越大,但如果有了负数,最大数会变成最小,最小会变成最大,因此要同时维护最小和最大 // 当前最大可能是:当前数本身(因为可能之前有0),之前的最大乘积乘以当前(如果当前为正数),之前的最小乘积乘以当前(如果当前负数) // 取这三种中最大的,而当前最小则是取三者中最小的 public int maxProduct(int[] nums) { if(nums==null||nums.length==0){ return 0; } int[] curMax=new int[nums.length]; int[] curMin=new int[nums.length]; curMax[0]=curMin[0]=nums[0]; int max=nums[0]; for(int i=1;i<nums.length;i++){ curMin[i]=Math.min(nums[i],Math.min(curMin[i-1]*nums[i],curMax[i-1]*nums[i])); curMax[i]=Math.max(nums[i],Math.max(curMin[i-1]*nums[i],curMax[i-1]*nums[i])); max=Math.max(max,curMax[i]); } return max; } }

     

    Processed: 0.022, SQL: 8