このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
どんな競技においても、レーティングが上がり続けることはとても重要な統計量である。あなたは、あるプレーヤーに対し、その統計量を計算することになった。ratingChanges[]というあるプレーヤーのレーティングの時系列に沿った変化を表す整数型の配列が与えられる。レーティングが正の変化を連続で続けた最大回数を返すメソッドを作成せよ。また、0は正の値ではないことに注意せよ。
私の解答はこちら。最大を更新したか?というboolean変数を準備しようと思っていたのですが、それもコードを書くうちに必要がないということが判断でき、比較的シンプルに書けたと思います。
public class CompetitionStatistics {
public int consecutiveGrowth(int[] ratingChanges) {
int maxlen = 0;
int len = 0;
for( int i=0 ; i<ratingChanges.length ; i++ ){
if( ratingChanges[i] > 0 ){
len++; // 連続で続いたので1加える
}else{
len=0; // リセット
}
maxlen = Math.max(maxlen, len); // これまでの最高回数に達したか?
}
return maxlen;
}
}

0 件のコメント:
コメントを投稿