2019-11-01_151247.jpg
/**
* n(n>=3)個數(shù)的不含0的數(shù)組,去除一個數(shù),使得剩余的數(shù)乘積最大芭商。
* 算法:
* A.如果所有的數(shù)乘積結(jié)果是負(fù)數(shù)责球,那么導(dǎo)致影響乘積最大的數(shù)就是最大的那個負(fù)數(shù)衰腌,剔除之后整個乘積就是最大的
* B.如果所有的數(shù)乘積結(jié)果是正數(shù),那么導(dǎo)致影響乘積最大的數(shù)就是最小的那個正數(shù),剔除之后整個乘積就是最大的
* negativeMax: 用來記錄最大的負(fù)數(shù)
* positiveMin: 用來記錄最小的正數(shù)
* isNegative:用來表示乘積結(jié)果的正負(fù)性質(zhì)
* @param arr
* @return
*/
private static int getMinMultiNumInGroup(int[] arr) {
if (arr == null || arr.length < 3) {
throw new RuntimeException("非法的數(shù)組");
}
int negativeMax = 0;
int positiveMin = 0;
if (arr[0] < 0) {
negativeMax = arr[0];
} else {
positiveMin = arr[0];
}
boolean isNegative = false;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < 0) {
// 找到最大的負(fù)數(shù)
if (negativeMax == 0 || negativeMax < arr[i]) {
negativeMax = arr[i];
}
// 記錄乘積的符號變化
if (!isNegative) {
isNegative = true;
}else {
isNegative = false;
}
} else {
// 找到最小的正數(shù)
if (positiveMin > arr[i]) {
positiveMin = arr[i];
}
// 正數(shù)乘以任何非0的數(shù)符號不變
}
}
return isNegative ? negativeMax : positiveMin;
}