これもmax sliceのアルゴリズムです。
ただ、今回はOpen reading material (PDF) に書かれているアルゴリズムの前提と違って、
スライスのサイズが0にならない、必ず一つは要素が入るということになっています。
これにより、もしその位置で終わることのできるスライスの最大値がその、ポジションにある値より小さい場合、0の代わりにそのポジションの値をあらたなmax_endingとして採用しなければなりません。
以前0をつかっていたのは、値が小さくなる=マイナスの値がそこに有る=つまり何も取らないサイズ0のスライスをとるほうが値が0として扱えるので大きいという理由ですね。
ですから、今回はどうしても一つ値を取らなければ行けないので、上のような方針になるわけです。
これを実装してみると100%のスコアがもらえました。
int solution(int A[], int N)
{
int max_ending = A[0];
int max_slice = A[0];
int i;
for (i = 1; i < N; i++){
int tmp = max_ending + A[i];
max_ending = tmp > A[i] ? tmp : A[i];
max_slice = max_slice < max_ending ? max_ending : max_slice;
}
return max_slice;
}
0 件のコメント:
コメントを投稿