`
ikeycn
  • 浏览: 146208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

获得最有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);	//删除值最大的负数
			}
		}

		
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics