【问题标题】:Sum of Differences in an Array Codewars (Javascript)数组代码战(Javascript)中的差异总和
【发布时间】:2021-05-15 03:07:07
【问题描述】:

我正在学习编码,现在在 for 循环部分。我在 Codewars 上遇到了一个有趣的问题,并决定解决它。这里是:

您的任务是按降序对数组中连续对之间的差异求和。

例如:

sumOfDifferences([2, 1, 10]) 返回 9

降序:[10,2,1]

总和:(10 - 2) + (2 - 1) = 8 + 1 = 9

如果数组为空或数组只有一个元素,则结果应为 0(在 Haskell 中为空)。>

由于我或多或少只知道 for 循环,所以这是我的答案。它通过了所有测试,但我不得不分离循环。 我的问题是:有没有办法使用嵌套循环来解决这个问题?我最初认为我可以,但我一直得到 NaN 作为输出。

   function differenceAddition(array) {
      if (array.length == 1) {
        return 0;
      } else if (array == []) {
        return [];
      } else
        for (let i = 0; i < array.length; i++) {
          for (let j = 0; j < array.length; j++) {
            if (array[j] < array[j + 1]) {
              let temp = array[j];
              array[j] = array[j + 1];
              array[j + 1] = temp;
            }
          }
        }
      let newArray = [];
      for (let i = 0; i < array.length - 1; i++) {
        newArray[i] = array[i] - array[i + 1];
      }
      let sum = 0;
      for (let i = 0; i < newArray.length; i++) {
        sum += newArray[i];
      }
      // newArray.pop();
      return sum;
      // return array;
    }

【问题讨论】:

  • else if (array == []) 永远不可能是真的——但这不是你的问题——使用数组减少
  • 哦,你永远不需要嵌套循环来解决这个问题——除非我不明白这个问题
  • 单行函数...const fn = array =&gt; array.slice(1).reduce((a, b, i) =&gt; a + Math.abs(b - array[i]), 0)

标签: javascript arrays loops


【解决方案1】:

首先——除非这个挑战有更多的东西,否则不要自己编写循环来对数组进行排序。使用内置的排序功能。

let arr = [2, 1, 10];
arr.sort((a,b) => b - a);
console.log(arr);

太好了,现在我们按降序排列。现在,我们只需要一个 for 循环来计算我们的总和。

let arr = [2, 1, 10];

arr.sort((a,b) => b - a);

let sum = 0;
for (let i = 0; i < arr.length - 1; ++i) {
    sum += arr[i] - arr[i + 1];
}

console.log(sum);

【讨论】:

    【解决方案2】:

    当您可以使用单个循环获得结果时,为什么还要使用嵌套循环。在 JS 中可以使用reduce 来实现。

    function sumOfDifferences(arr) {
      return arr
        .sort((a, b) => b - a)
        .reduce((acc, curr, index, array) => {
          const next = array[index + 1];
          if (!isNaN(curr - next)) {
            acc += curr - next;
          }
          return acc;
        }, 0);
    }
    
    console.log(sumOfDifferences([]));
    console.log(sumOfDifferences([10]));
    console.log(sumOfDifferences([10, 1, 2]));

    【讨论】:

    • 谢谢!我很欣赏这种洞察力。
    【解决方案3】:

    试试这个

    let numberList = [2, 1, 10];
    // sorting for descending order
    numberList.sort((a,b) => b - a);
    
    let sum = 0;
    let dif = 0
    
    for(let i=0; i<numberList.length-1; i++){
        dif = numberList[i] - numberList[i+1];
        sum += dif
    };
    
    console.log("Result=> ",sum);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2020-08-05
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多