配列の平衡点を求めます
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つの平衡点があるが,次のプログラムは見つからない.他のバグはまだ発見されていません.
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...");
}
}