使用 JavaScript 計算範圍內和為限值的成對數


範圍和

範圍和 rangeSum(i, j)被定義為陣列中索引 i 和 j (i ≤ j)之間的元素的和,含兩端。

問題

我們需要編寫一個 JavaScript 函式,其中作為第一個引數輸入一個整數陣列 arr,作為第二個引數輸入一個數字 upper,作為第三個引數輸入一個數字 lower。

我們的函式應該返回範圍 [upper, lower](含兩端)內的範圍和數。

例如,如果函式的輸入為 −

const arr = [1, 4, 3];
const upper = 5;
const lower = 2;

那麼輸出應為 −

const output = 3;

範例

程式碼為 −

const arr = [1, 4, 3];
const upper = 5;
const lower = 2;
const countRangeSum = (arr = [], lower, upper) => {
   const sums = [0];
   let res = 0;
   let last = 0;
   let firstge = value => {
      let l = 0, r = sums.length, m;
      do {
         m = Math.floor((r + l) / 2);
         sums[m] < value ? l = m : r = m;
      } while (r >= l + 2);
      while (r > 0 && sums[r - 1] >= value ) {
         r -= 1;
      }
      return r;
   };
   arr.forEach(num => {
      last += num;
      res += firstge(last - lower + 1) - firstge(last - upper);
      sums.splice(firstge(last), 0, last);
   });
   return res;
};
console.log(countRangeSum(arr, lower, upper));

輸出

控制檯中的輸出為 −

3

更新時間: 2021 年 3 月 19 日

215 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.