原题目:https://oj.leetcode.com/problems/maximum-product-subarray/
例如输入[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;
}
}
}
}
原文:http://blog.csdn.net/startupmount/article/details/41808139