今回は paiza の「「PV調査」を解くために:part4」の問題に挑戦!
問題概要
- ウェブサイトの訪問データを持っている。
 - 連続する 
k日間の合計訪問者数」がすでに計算されており、
その中で 最も訪問者数が多かった期間のうち、一番早い開始日 を求める。 
つまり:
- 各 
b_iは「i日目からi+k−1日目までの合計訪問者数」
その中で 最大のb_iを探し、
その最大値が最初に現れたiを出力する問題。 
入力例:
8 3 // n k
13 9 11 14 19 20 // b_i
出力例:
6
✅ OK例:
const rl = require('readline').createInterface({ input:process.stdin });
const lines = [];
rl.on('line', (input) => lines.push(input));
rl.on('close', () => {
    const [n, k] = lines[0].split(' ').map(Number);
    const b = lines[1].split(' ').map(Number);
    
    let ans = 1;
    let max = null;
    
    for (let i = 0; i < n - k + 1; i++) {
        if (b[i] > max) {
            max = b[i];
            ans = i+1;
        }
    }
    
    console.log(ans);
});
🧩 コードの流れ
- 入力を受け取る
- 1行目 → 
n, kを取得 - 2行目 → 連続する 
k日間の合計訪問者数の配列bを取得 
 - 1行目 → 
 - 初期設定
- 
ans = 1:最初の開始日(1日目)を仮の答えとして設定 - 
max = null:まだ最大値が決まっていない状態で初期化 
 - 
 - ループで最大値を探索
- 
for (let i = 0; i < n - k + 1; i++)- 各 
b[i](i番目の合計訪問者数)を確認 - 
b[i] > maxのとき:- 
maxを更新(新しい最大値) - 
ansにその開始日i+1を代入(1始まりのため) 
 - 
 
 - 各 
 
 - 
 - 結果を出力
- 最も合計訪問者数が多かった 最初の開始日(1-indexed)を出力
 
 
🗒️ まとめ
- 配列の最大値探索
→if (b[i] > max) { max = b[i]; ans = i + 1; } - 「最初の出現」を優先したいとき
→>=ではなく>を使うのがポイント。 - 1-indexed(1日目スタート) に注意して 
i+1。