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
广告