旧代码,先贴上来,待整理
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); //删除值最大的负数
}
}
}
}