最大减少相邻元素 - 在阵列上失败[10,11,12]

时间:2017-06-09 16:36:55

标签: javascript arrays

除了数组[10,11,12]之外,我得到了所有通过此解决方案的测试。我被卡住了。谢谢你的帮助

问题:

  

给定一个整数数组,找到任意两个相邻元素之间的最大绝对差值。

示例:

  

对于inputArray = [2,4,1,0],输出应为   arrayMaximalAdjacentDifference(inputArray)= 3.

我的测试失败:

  

输入:

     

inputArray:[10,11,13]

     

输出:   0

     

预期产出:   2

     

控制台输出:   空



function arrayMaximalAdjacentDifference(arr) {
    var dif = 0;
    var max = 0;
    for(var i = 0; i < arr.length; i++){
        dif = arr[i] - arr[i+1];
        if(dif > max){
            max = dif;
        }
    }
    return max;
}
&#13;
&#13;
&#13;

6 个答案:

答案 0 :(得分:6)

引用练习:

  

给定一个整数数组,找到任意两个相邻元素之间的最大绝对差异。

因此,您的代码应如下所示:

CoordinatorLayout

答案 1 :(得分:0)

您可以在数组中创建每个元素及其下一个兄弟之间差异的数组,然后将spread数组传递到Math.max,如下所示:

重要的一点是获得数字之间差异的绝对值,因此您不会得到负数。我相信这就是造成你问题的原因。

function arrayMaximalAdjacentDifference(arr) {
    var differences = arr.map((elem, index) => {
        if (arr[index+1] != null) {
            return Math.abs(elem - arr[index+1]);
        }
        else {
            return 0;
        }
    });
    return Math.max(...differences);
}

console.log(arrayMaximalAdjacentDifference([10, 11, 13]));
console.log(arrayMaximalAdjacentDifference([1, 5, 3]));
console.log(arrayMaximalAdjacentDifference([4, 8, 16]));

答案 2 :(得分:0)

您可以使用第二个元素的副本迭代数组,并返回delat或最后一个delta的最大值。

&#13;
&#13;
function maxDelta(array) {
    return array.slice(1).reduce(function (r, a, i) {
        return Math.max(Math.abs(array[i] - a), r);
    }, 0);
}

console.log(maxDelta([10, 11, 12])); // 1
console.log(maxDelta([2, 4, 1, 0])); // 3
console.log(maxDelta([10, 11, 13])); // 2
&#13;
&#13;
&#13;

答案 3 :(得分:0)

当您在问题正文中要求不同时,主题会逐渐减少。我会选择第二个并继续。你可以这样做;

&#13;
&#13;
var a   = [10, 11, 13],
    res = Math.max(...Array(a.length-1).fill().map((_,i) => Math.abs(a[i]-a[i+1])));
console.log(res);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

你可以试试这个:

def arrayMaximalAdjacentDifference(inputArray):
   
        max_diff = inputArray[1] - inputArray[0]
        dif =[]
        for i in range( 1, len(inputArray) ):      
                
                if (abs(inputArray[i-1] - inputArray[i]) > max_diff ):               
                    max_diff = abs(inputArray[i-1] - inputArray[i])
                    dif.append(max_diff)
                    print(max_diff)
               
        return max_diff

答案 5 :(得分:-1)

您可以使用reduce()方法

function findM(arr) {
  return arr.reduce(function(r, e, i) {
    if (arr[i + 1] || arr[i + 1] == 0) {
      var diff = Math.abs(arr[i] - arr[i + 1]);
      if (diff > r) r = diff
    }
    return r;
  }, 0)
}

console.log(findM([10, 11, 13]))
console.log(findM([2, 4, 1, 0]))