TC:
SC:
Using prefix and suffix array
class Solution {
public int maxProduct(int[] nums) {
int prefix[] = new int[nums.length];
int suffix[] = new int[nums.length];
for(int i=0;i<nums.length;i++){
prefix[i] = nums[i];
suffix[i] = nums[i];
}
for(int i=1;i<nums.length;i++){
int val = prefix[i]*prefix[i-1];
prefix[i] = val ==0 ? prefix[i] : val; // imp
}
int max = Integer.MIN_VALUE;
for(int i=0;i<nums.length;i++){
max = Math.max(max, nums[i]);
}
for(int i = nums.length-2;i>=0;i--){
int val = suffix[i]*suffix[i+1];
suffix[i] = val ==0 ? suffix[i] : val;// imp
}
for(int i=0;i<nums.length;i++){
int current = Math.max(prefix[i],suffix[i]);
max = Math.max(max, current);
}
return max;
}
}
More concise and memory efficient
class Solution {
public int maxProduct(int[] nums) {
// note: prefix and suffix variables are keeping track if history
int prefix = 1;
int suffix = 1;
int max = Integer.MIN_VALUE;
for(int i =0;i<nums.length;i++){
if(prefix ==0) prefix = 1;
if(suffix ==0) suffix = 1;
prefix*=nums[i];
suffix*=nums[nums.length-i-1];
max = Integer.max(max, Integer.max(prefix, suffix));
}
return max;
}
}
Top comments (0)