例如輸入[2,3,-2,4]?
符合條件的子數組應該是[2,3],他們的乘積是6
/**
* @Author jiangfq
*
*/
package com.test;
/**
* @author jiangfq
*
*/
public class Solution {
/**
* @Author jiangfq
*
*/
public static void main(String[] args) {
int[] a = {-3,0,1,-2};
Solution s = new Solution();
int b = s.maxProduct(a);
System.out.println(b= + b);
}
public int maxProduct(int[] A) {
if(A.length == 0) { //如果是0,則返回0
return 0;
} else if(A.length == 1) { //如果有一個
return A[0];
} else if(A.length == 2) { //如果數組有兩個元素
if(A[0] > A[0]*A[1]) {
return A[0];
} else if(A[1] > A[0]*A[1]) {
return A[1];
}
return A[0]*A[1];
} else {
int ood = 0; //記錄負數的個數
int sum = 1;
for(int i = 0; i < A.length; i++) { //先計算負數個數以及總乘積
sum *= A[i];
if(A[i] < 0) {
ood++;
}
}
if(ood !=0 && ood%2==0 && sum != 0) {
return sum;
} else {
int max = A[0]; //記錄當前的最大值
int prev = max; //記錄前一個最大值,方便與當前最大值做比較
for(int i = 0; i < A.length; i++) {
max = A[i];
int s = max;
if(s == 0) { //如果是0,則跳過
continue;
}
for(int j = i+1; j < A.length; j++) {
s *= A[j];
if(max < s) {
max = s;
}
}
if(prev < max) {
prev = max;
}
}
return prev;
}
}
}
}