输入 int[]
自己想出来的解法
所有数相乘,如果正数直接返回,如果负数就再除以最小负边界序列。但是少考虑了0的情况,导致后来加入了递归使代码臃肿不堪。
class Solution {
public int maxProduct(int[] nums) {
//如果有0就分成没0的数组递归判断。
for(int i = 0;i<nums.length;i++){
if(nums[i]==0){
if(nums.length==1)
return 0;
int[] l = new int[i];
int[] r = new int[nums.length-i-1];
for(int j=0;j<i;j++)
l[j]=nums[j];
int jj=0;
for(int j = i+1;j<nums.length;j++){
r[jj]=nums[j];
jj++;
}
if(i==0)
return Math.max(0,maxProduct(r));
if(i==nums.length-1)
return Math.max(0,maxProduct(l));
int max= Math.max(maxProduct(l),maxProduct(r));
return Math.max(0,max);
}
}
//代码开始
int left=-1;
int right=0;
int sum=1;
for(int i = 0;i<nums.length;i++){
int v=nums[i];
sum*=v;
if(v<0){
if(left==-1)
left=i;
right=Math.max(right,i);
}
}
if(sum<0&&nums.length!=1){
int ls=1,rs=1;
for(int i = 0; i<=left;i++)
ls*=nums[i];
for(int i = right; i<nums.length;i++)
rs*=nums[i];
ls=Math.max(ls,rs);
return sum/ls;
}else
return sum;
}
}
评论区