【问题标题】:Whats the best possible solution for getting a maximum difference between sucessive elements in a sorted array什么是获得排序数组中连续元素之间最大差异的最佳解决方案
【发布时间】:2020-01-31 02:20:23
【问题描述】:

如果有数组 let arr = [7,1,4,3,8],结果应该是 3,这是 4 和 7 之间的最大差值。

同样,let arr2 = [5,5,5,7,4] 的输出为 2(介于 5 和 7 之间),let arr3 = [6,3,2,5,9] 的输出为 3(介于 6 和 9 之间)。

找出最大差异的最佳优化解决方案是什么。

我的方法是对数组进行排序并找出连续元素之间的差异,然后使用Math.max(...differenceValues)找到最大值

PS:我不是在寻找数组中最大值和最小值之间的差异。当您在 x 轴上绘制图表时,上述问题是有意义的。

【问题讨论】:

  • 这可能属于计算机科学堆栈交换:meta.stackexchange.com/questions/165519/…
  • 所以排序和循环并保持最大值 arr.sort().reduce()
  • 您可能想要添加一些您自己的代码来展示您尝试过的内容。原因是,ATM 问题看起来像是一个主观的操作方法/最好的方法,将被否决,并且可能会因为不是 SO 的好格式而被标记为关闭。
  • 你实际上有多少个值?是不是非要排序才能大幅提升性能?我敢打赌,你可以比O(n log n) 做得更好(至少在平均情况下),但实现的复杂性成本很高。
  • 看起来像这样,带有一个排序数组:stackoverflow.com/q/56550131/1447675

标签: javascript node.js


【解决方案1】:

这是一个使用reduce的例子:

let arr = [7,1,4,3,8];

const max = arr.sort((a,b) => a-b)
               .reduce((result,currentValue,index) => {
                 if(result < arr[index + 1] - currentValue) {
                     return arr[index + 1] - currentValue
                 }
                 return result
               }, 0);

console.log(max);

类似,但使用 mapMath.max

let arr = [7,1,4,3,8];

const max2 = Math.max(...arr.sort((a,b) => a-b)
                .map((v, i) => (++i < arr.length) ? Math.abs(v - arr[i]) : 0));
                
console.log(max2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多