0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 区間探索 1

Posted at

区間探索 1 (paizaランク B 相当)

解答例

a に x 以上の要素は必ず 1 つ以上存在するので、最大長の最小値は1で、これを初期値とします。
lとrの初期値は0未満になるようにします。aのインデックにならないようにです。aのインデックになると、r-l+1=0の計算で、長さが求まってしまいます。
aの要素がx以上の時は、lが初期値だったら、更新します。rを伸ばします。最後のiだったら、最大の長さを求めます。
aの要素がx未満の時は、最大の長さを求めて、lとrをリセットします。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n, x] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let max = 0;//最大長
let [l, r] = [-1, -1];//lとrの初期値。r-l+1=1なるように。aのインデックスにならないように0未満の値にする。


for (let i = 0; i < n; i++) {
  if (a[i] >= x) {
    //lが初期値のままだったら更新
    if (l < 0) {
      l = i;
    }
    //rは伸ばす
    r = i;
    //最後だったら、長さ判定する
    if (i === n - 1) {
      max = Math.max(max, r - l + 1);
    }
  } else {
    max = Math.max(max, r - l + 1);
    [l, r] = [-1, -1];//l,rリセット
  }
}
console.log(max);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0