获得最有n个元素的整数数组list中使得具有最大乘积的n-1个

旧代码,先贴上来,待整理
package cn.ustc;
import java.util.List;


public class MaxArray{

/**
* getMax方法用于获得最有n个元素的整数数组list中使得具有最大乘积的n-1个
* 元素的数组
* @param list
* @author xyjie
*/
public void getMax(List<Integer> list){

int negSize = 0; //用于记录负整数的个数
int posSize = 0; //用于记录正整数的个数
int zeroSize = 0; //用于记录0的个数

int maxNeg = Integer.MIN_VALUE; //用于保存最大的负整数
int minNeg = Integer.MAX_VALUE; //用于保存最小的负整数
int minPos = Integer.MAX_VALUE; //用于保存最小的正整数

int listSize = list.size();

int maxNegPosition = listSize; //用于保存最大负整数的位置
int minNegPosition = listSize; //用于保存最小负整数的位置
int minPosPosition = listSize; //用于保存最小正整数的位置
int zeroPosition = listSize; //用于保存一个0的位置

int currentValue;


for(int i = 0; i < listSize; i++){
currentValue = list.get(i);
if(currentValue > 0){ //当前处理值为正整数
++posSize;
if(currentValue < minPos){ //如果当前值比minPos小,更新minPos和minPosition
minPos = currentValue;
minPosPosition = i;
}
}else if(currentValue < 0){ //当前处理值为负整数
++negSize;
if(currentValue > maxNeg){ //如果当前值比maxNeg大,更新maxNeg和maxNegPosition
maxNeg = currentValue;
maxNegPosition = i;
}else if(currentValue < minNeg){ //如果当前值比minNeg小,更新minNeg和minNegPosition
minNeg = currentValue;
minNegPosition = i;
}
}else{ //当前处理值为0
++zeroSize;
zeroPosition = i; //zeroPosition记录了最后一次0出现的位置
}
}

if(zeroSize >= 2){ //如果数组中0的个数大于2,则其任意n-1个元素的积均为0
list.remove(0);
}else if(zeroSize == 1){ //数组中有一个数值为0
if(negSize % 2 == 0){ //有偶数个负数

list.remove(zeroPosition);
}else{ //有奇数个负数
list.remove(maxNegPosition); //任意删除一个数,这里删除了最大的负数(删除其他位置的非0元素也是一样的效果)
}
}else if (zeroSize == 0){ //数组中没有值为0的元素
if(negSize % 2 == 0){ //有偶数个负数
if(posSize == 0){ //正数个数为0
list.remove(minNegPosition); //删除绝对值最大的负数
}else{
list.remove(minPosPosition); //删除最小的正整数
}
}else{ //有奇数个负数
list.remove(maxNegPosition); //删除值最大的负数
}
}


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值