blog

パワーバックル 1343, 配列, スライディングウィンドウ解法

整数の配列 arr と、2つの整数 k と threshold が与えられます。 長さが k で平均値が threshold 以上の部分配列の数を返します。 解説:[2,5,5]、[5,5,5]、[5...

Nov 12, 2020 · 2 min. read
シェア

パワーボタン1343の質問、配列、スライディングウィンドウソリューション

問題

整数の配列 arr と2つの整数 k と threshold が与えられます。

平均値がしきい値以上である長さ k の部分配列の数を返すように要求されます。

入力: arr = [2,2,2,2,5,5,8], k = 3, threshold = 4 出力: 3

解説:部分配列[2,5,5]、[5,5,5]、[5,5,8]の平均値はそれぞれ4、5、6。長さ3の他の部分配列はすべて平均値が4(しきい値の値)より小さい。

入力: arr = [1,1,1,1,1,1], k = 1, threshold = 0 出力: 5

入力: arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5 出力: 6

説明:長さ3の最初の6つの部分配列の平均は5より大きい。平均は整数ではないことに注意してください。

入力: arr = [7,7,7,7,7,7,7,7,7], k = 7, しきい値 = 7 出力: 1

入力: arr = [4,4,4,4], k = 4, threshold = 1 出力: 1

ヒント
  • 1 <= arr.length <= 10^5
  • 1 <= arr[i] <= 10^4
  • 1 <= k <= arr.length
  • <= threshold <= 10^4
var numOfSubarrays = function(arr, k, threshold) {
  // 現在のウィンドウに格納されている要素の合計
  // 此处将sums / k >= threshold, 和に変換する >= k * threshold 
  let sums = 0;
  // ターゲットの戻り値
  let nums = 0;
  const len = arr.length;
  // ターゲット・サム
  const target = k * threshold;
  // 一定不符合的参数直接return 0
  if (arr.length < k) return 0;
  // ウィンドウの最初の位置
  for (let i = 0; i < k; i++) {
    sums += arr[i];
  }
  // 最初の位置のウィンドウが条件を満たすかどうかを判定する
  if (sums >= target)  nums++;
  // ウィンドウをスライドさせ、その都度前のビットを削除し、次のビットを追加する。
  for (let i = k; i < len; i++) {
    // 最後のビットを追加する
    sums += arr[i];
    // 最初のビットを取り除く
    sums -= arr[i - k];
    // このスライドの部分配列が有効かどうかを判定する
    if (sums >= target) nums++;
  }
  return nums;
};
Read next

webpackのマルチエントリファイルパッケージングビルドのスタイルの損失。

元のプロジェクトには1つのエントリファイルapp.jsがあるだけで、今、我々はログイン認証のためのエントリファイルoAuth.jsを追加する必要があります、私たちは、梱包とビルドした後、我々は、oAuthページが正常に表示され、元のページのスタイルが失われていることがわかりました。 ログイン機能はappとoAuthで同じで、どちらのファイルもloginコンポーネントを使用していますが、パッケージング後のapp.cssにはloginスタイルがありません...。

Nov 12, 2020 · 1 min read