【问题标题】:How do I pass this algorithm challenge?我如何通过这个算法挑战?
【发布时间】:2020-04-15 12:54:17
【问题描述】:

我正在解决 freecodecamp 的基本算法挑战。挑战是返回数组中的最大数。这是代码。

function largestOfFour(arr) {
  // You can do this!
  let largestWord = [0,0,0,0];

  for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < arr[i].length; j++) {
      if(arr[i][j] > largestWord[i]) {
        largestWord[i] = arr[i][j];
      }
    }
  }
  return largestWord;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

我已经通过了三个标准:

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) 应该返回一个大批。 通过 largeOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) 应该返回 [27, 5 , 39, 1001]。 通过 maximumOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) 应该返回 [9, 35 , 97, 1000000]。

所有除最大的Four([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, - 17, -10]]) 应该返回 [25, 48, 21, -3]。

我哪里做错了?

【问题讨论】:

  • 问题很简单!您已将最大值全部设置为 0... 那么哪个更大:0[-72, -3, -17, -10] 中的任何一个?如果你这样做let largestWord = [Number.MIN_SAFE_INTEGER,...];
  • 如果您喜欢坚持自己的方法,请执行let largestWord = Array(arr.length).fill(-Infinity)。但是下面的答案中建议了一种更短的方法。

标签: javascript algorithm


【解决方案1】:

看来使用.map()Math.max() 可以更轻松地做到这一点

function largestOfFour(arr) {  
  return arr.map(x => Math.max(...x));
}

console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
console.log(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]));

【讨论】:

    【解决方案2】:

    所以在你的代码中你在这个块中出错了。

     if(arr[i][j] > largestWord[i]) {
        largestWord[i] = arr[i][j];
     }
    

    您忘记的事情是您有一个最大数字的起始值,即 0,然后您将数组元素与该值进行比较。只有一个值超过 0 才会替换它。所以我建议只初始化没有值的数组并检查它

    //initialize the array without a value
    let largestWord = new Array(4);
    
    for(let i = 0; i < arr.length; i++) {
      for(let j = 0; j < arr[i].length; j++) {
    
        //also add a check for initial value
        if(arr[i][j] > largestWord[i] || largestWord[i] == undefined) {
         largestWord[i] = arr[i][j];
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多