JavaScriptのHackerrankサービスレーン問題の解法


  1. 総当たり法: この方法では、指定された範囲内の各車両の幅を比較し、最小幅を見つけます。以下はJavaScriptでのコード例です。

    function serviceLane(width, cases) {
     const result = [];
     for (let i = 0; i < cases.length; i++) {
       const [start, end] = cases[i];
       let min = Infinity;
       for (let j = start; j <= end; j++) {
         if (width[j] < min) {
           min = width[j];
         }
       }
       result.push(min);
     }
     return result;
    }
  2. 前処理と動的計画法: この方法では、道路の幅を前処理しておき、各範囲の最小幅を効率的に求めます。以下はJavaScriptでのコード例です。

    function preprocess(width) {
     const dp = [0];
     for (let i = 1; i < width.length; i++) {
       dp[i] = Math.min(dp[i - 1], width[i]);
     }
     return dp;
    }
    function serviceLane(width, cases) {
     const result = [];
     const dp = preprocess(width);
     for (let i = 0; i < cases.length; i++) {
       const [start, end] = cases[i];
       result.push(dp[end] - dp[start - 1]);
     }
     return result;
    }