n(n>=3)个数的不含0的数组,去除一个数,使得剩余的数乘积最
作者:
Sanisy | 来源:发表于
2019-11-01 15:16 被阅读0次
2019-11-01_151247.jpg
/**
* n(n>=3)个数的不含0的数组,去除一个数,使得剩余的数乘积最大。
* 算法:
* A.如果所有的数乘积结果是负数,那么导致影响乘积最大的数就是最大的那个负数,剔除之后整个乘积就是最大的
* B.如果所有的数乘积结果是正数,那么导致影响乘积最大的数就是最小的那个正数,剔除之后整个乘积就是最大的
* negativeMax: 用来记录最大的负数
* positiveMin: 用来记录最小的正数
* isNegative:用来表示乘积结果的正负性质
* @param arr
* @return
*/
private static int getMinMultiNumInGroup(int[] arr) {
if (arr == null || arr.length < 3) {
throw new RuntimeException("非法的数组");
}
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) {
// 找到最大的负数
if (negativeMax == 0 || negativeMax < arr[i]) {
negativeMax = arr[i];
}
// 记录乘积的符号变化
if (!isNegative) {
isNegative = true;
}else {
isNegative = false;
}
} else {
// 找到最小的正数
if (positiveMin > arr[i]) {
positiveMin = arr[i];
}
// 正数乘以任何非0的数符号不变
}
}
return isNegative ? negativeMax : positiveMin;
}
本文标题:n(n>=3)个数的不含0的数组,去除一个数,使得剩余的数乘积最
本文链接:https://www.haomeiwen.com/subject/wfofbctx.html
网友评论