/**
* 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的数组,去除一个数,使得剩余的数乘积最大
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 上一篇文章讲了快速排序,这期讲讲对动态规划的理解:动态规划的思想是 将问题划分为多个子问题,从子问题入手,逐步解决...
- public class test{ public static void main(String[] args)...
- 思路:0/1背包问题的变形 A.每张卡牌存在取与不取(a取,则b不取,b取则a不取) 两种状态, 即F[i][j]...