JavaScript 中绝对差等于某个数字的最长子数组

javascriptweb developmentfront end technology更新于 2024/8/18 5:33:00

我们需要编写一个 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

相关文章