JavaScript中具有絕對差值等於某個數字的最長子陣列


我們需要編寫一個 JavaScript 函式,該函式將一個數字陣列作為第一個引數(比如 arr),將一個數字(比如 num)作為第二個引數。該函式應查詢並返回最長子陣列(連續或非連續)的長度,其每對陣列絕對差值小於或等於 num。

例如,如果輸入陣列和數字為 -

const arr = [7, 9, 8, 6, 6, 3];
const num = 1;

則輸出應當為 -

const output = 3,

因為所需子陣列是 [7, 6, 6]

示例

程式碼如下 -

 動態演示

const arr = [7, 9, 8, 6, 6, 3];
const maximumSubarray = (arr = [], num = 1) => {
   if(!arr.length){
      return 0;
   };
   const maximum = arr.reduce((acc, val) => Math.max(acc, val));
   const buckets = new Array(maximum + 1);
   buckets.fill(0);
   const { length } = arr;
   for(let i=0; i< length; i++){
      buckets[arr[i]] += num;
   };
   let max = 0;
   for(let j=1; j< maximum + 1; j++) {
      let curr = buckets[j];
      let prev = buckets[j - 1];
      if(prev != 0 && prev + curr > max) {
         max = prev + curr;
      };
   };
   return max;
};
console.log(maximumSubarray(arr));

輸出

控制檯中的輸出將為 -

3

更新於: 2021 年 2 月 24 日

128 次瀏覽

啟動你的 職業

透過完成課程獲取認證

開始
廣告
© . All rights reserved.