首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数组中找到最大的差异

在数组中找到最大的差异
EN

Stack Overflow用户
提问于 2015-04-12 03:36:28
回答 12查看 15.3K关注 0票数 6

我正在研究一种算法,以返回任意一对数字的差分,使得该数字中较大的整数出现在比小整数更高的索引处(在数组中)。

例子..。

阵列: 2,3,10,2,4,8,1

解决办法:10-2=8

产出:8

阵列: 7,9,5,6,3,2

解决办法:9-7=2

产出:2

这是我有的,但并不适用于所有的测试.

代码语言:javascript
运行
复制
var a = [22, 2, 4, 5, 6, 444, 1, 666];

// declare variables
var minNumber = a[0],                   // initilize to first element
    maxNumber = a[0],                   // --- ^
    minNumberIndex = 0,                 // min index
    maxNumberIndex = a.length - 1;      // max index

// loop through each element in array
for(i = 0; i < a.length; i++) {

    // find min
    if (a[i] < minNumber && i < maxNumberIndex) {
        minNumber = a[i];
        minNumberIndex = i;
    }

    // find max
    if (a[i] >= maxNumber && i > minNumberIndex) {
        maxNumber = a[i];
        maxNumberIndex = i;
    }
}

// return results
console.log("max: \t" + maxNumber);
console.log("min: \t" + minNumber + "index: " + minNumberIndex);
console.log(maxNumber - minNumber);  

请帮帮我!

EN

回答 12

Stack Overflow用户

发布于 2018-11-03 19:44:22

O(n)解决办法:

代码语言:javascript
运行
复制
function maxDifference(arr) {
  let maxDiff = -1;
  let min = arr[0];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] > min && maxDiff < arr[i] - min) {
      maxDiff = arr[i] - min;
    }

    if (arr[i] < min) {
      min = arr[i];
    }
  }
  return maxDiff;
}

console.log(maxDifference([1, 2, 3])); //2
console.log(maxDifference(3, 2, 1)); //-1
console.log(maxDifference([2, 3, 10, 2, 4, 8, 1])); //8
console.log(maxDifference([7, 9, 5, 6, 3, 2])); //2
console.log(maxDifference([22, 2, 4, 5, 6, 444, 1, 666])); //665
console.log(maxDifference([7, 9, 5, 6, 3, 2])); //2
console.log(maxDifference([666, 555, 444, 33, 22, 23])); //1
console.log(maxDifference([2, 3, 10, 2, 4, 8, 1])); //8

票数 8
EN

Stack Overflow用户

发布于 2017-09-06 17:52:22

代码语言:javascript
运行
复制
let MaxDifference = arr => {
  let maxDiff = null;
  for(let x = 0; x < arr.length; x++){
    for(let y = x+1; y < arr.length; y++){
        if(arr[x] < arr[y] && maxDiff < (arr[y] - arr[x])){
            maxDiff = arr[y] - arr[x]
        }
    }
  }
  return maxDiff === null ? -1 : maxDiff;
}
票数 6
EN

Stack Overflow用户

发布于 2015-04-12 04:00:28

你可以有两个数组。让我们称它们为minlrmaxrl

minlr -其中minlr[i]在原始数组中从左到右存储最小值直到索引i

maxrl -其中maxrl[i]在原始数组中从右到左存储最大值直到索引i

一旦有了这两个数组,就可以迭代这些数组,并找到maxrl[i]minlr[i]之间的最大差异。

在上面的例子中:

  1. minlr = {2,2,2,2,2,2,1}; maxrl = {10,10,10,8,8,8,1}; 所以在这种情况下,答案是10-2= 8。
  2. minlr = {7,7,5,5,3,2}; maxrl = {9,9,6,6,3,2}; 所以在这种情况下,答案是9-7=2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29585679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档