演習課題「しゃくとり法の実装」
整数 n, k と長さ n の配列 a が与えられます。
この配列の中で、総和が k 未満の区間の個数を求めてください。
入力を受け取るコードがすでに用意されているので、コードを書き足してプログラムを完成させてください。
期待する出力値
4
※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#08:しゃくとり法
高速に探索を行うアルゴリズムである「しゃくとり法」について学習します。
しゃくとり法を適用するための条件には、いくつかの制約があります。これらの制約を満たしていれば、必ずしゃくとり法を適用することができます。
・ある区間が条件を満たすなら、その区間に含まれるすべての区間が条件を満たす
・ある区間が条件を満たさないなら、その区間を含むすべての区間が条件を満たさない
・左端や右端を 1 つ動かしたとき、条件を満たすかどうかの判定を高速に行うことができる
しゃくとり法の l, r が表す区間は、半開区間 [l, r) になります。
条件判定にかかる時間計算量が O(x) のとき、しゃくとり法の全体での時間計算量は、O(nx) となります。
これは、ループに必要な回数が n であり、また右端を伸ばす回数の合計も n であることによります。
ログインすると採点できます
コードの実行