配列の平衡点を求めます

2097 ワード

原文:
http://www.iteye.com/topic/600079
平衡点:例えばint[]numbers={1,3,5,7,8,25,4,20}25の前の総和は24で、25の後の総和も24で、25という点が平衡点です.配列内の要素が前の部分が後ろの部分に等しい場合、この点のシーケンスは平衡点です.
要求:任意の平衡点を返す
構想:配列の両側を同時に和を求めるには、配列を1回だけ遍歴し、カウント和回数countを統計し、countが配列長-1であれば、平衡点がある.
日記を書いて、自分のコードを記録します.
bugは,{1,0,0,0,1}に複数の平衡点が存在し,次のプログラムでは中間の0しか見つからない.{1,0,0,1}は2つの平衡点があるが,次のプログラムは見つからない.他のバグはまだ発見されていません.

public static void getBalancePoint(int[] arg){
		if(arg==null){
			System.out.println("array is null...");
			return;
		}
		if(arg.length<3){
			System.out.println("array's length is smaller than 3...no balance...");
			return;			
		}
		if(arg.length==3){
			if(arg[0]==arg[2]){
				System.out.println("array's balance is : "+arg[1]);
			}else{
				System.out.println("array has no balance...");
			}
			return;
		}
		int totalHead=0; //     (             )
		int totalEnd=0; //     
		int head=0; //        
		int end=arg.length-1; //        
		boolean addHead=true; //       
		boolean addEnd=true; //       
		int addCount=0; //      
		while(head<end){
			if(addHead){ //       
				totalHead+=arg[head];
				addCount++;
			}
			if(addEnd){ //       
				totalEnd+=arg[end];
				addCount++;
			}
			if(totalHead<totalEnd){ //        
				head++;
				addHead=true;
				addEnd=false;
			}else if(totalHead>totalEnd){ //        
				end--; 
				addHead=false;
				addEnd=true;
			}else{ //      
				head++;
				end--;
				addHead=true;
				addEnd=true;
			}
		} //end while
		if(addCount==(arg.length-1)){ //     
			System.out.println("array's balance is : "+arg[head]);
		}else{
			System.out.println("array has no balance...");
		}
	}