コード判定結果
動画プレイヤーの機能を制限して表示しています
一部機能が正常に読み込まれませんでした。
コンテンツブロックなどが動作していないかご確認ください。
コンテンツブロックなどが動作していないかご確認ください。
このチャプターでの演習課題が終了していません
次のチャプターへ進みますか
ジャッジに時間がかかっています
しばらくしてから再度アクセスしてください。
演習課題を利用するにはpaiza会員登録のうえ、
有料会員登録が必要です
有料会員登録が必要です
新・アルゴリズムとデータ構造入門 Java編8: 累積和
#08:しゃくとり法
この動画を見るにはpaiza会員登録のうえ
有料会員登録が必要です
実技課題 「しゃくとり法の実装」
整数 n, k と長さ n の配列 a が与えられます。
この配列の中で、総和が k 未満の区間の個数を求めてください。
入力を受け取るコードがすでに用意されているので、コードを書き足してプログラムを完成させてください。
【制約】
・ 入力は全て整数
・ 1 ≦ n ≦ 10
・ 1 ≦ (配列 a の各要素), k ≦ 100
期待する出力値
4
高速に探索を行うアルゴリズムである「しゃくとり法」について学習します。
しゃくとり法を適用するための条件には、いくつかの制約があります。これらの制約を満たしていれば、必ずしゃくとり法を適用することができます。
・ある区間が条件を満たすなら、その区間に含まれるすべての区間が条件を満たす
・ある区間が条件を満たさないなら、その区間を含むすべての区間が条件を満たさない
・左端や右端を 1 つ動かしたとき、条件を満たすかどうかの判定を高速に行うことができる
しゃくとり法の l, r が表す区間は、半開区間 [l, r) になります。
条件判定にかかる時間計算量が O(x) のとき、しゃくとり法の全体での時間計算量は、O(nx) となります。
これは、ループに必要な回数が n であり、また右端を伸ばす回数の合計も n であることによります。