【问题标题】:How to find the highest number in a 2-dimensional array?如何找到二维数组中的最大数?
【发布时间】:2021-11-10 05:50:48
【问题描述】:

大家好,提前感谢您的帮助。

所以我想在二维数组中找到最大的数字。 下面是代码:

const matrix = [
  [2, 56, 10],
  [20, 34, 10],
  [23, 144, 26]
];
let maximum = matrix[0][0];
for (var row = 0; row < matrix.length; row++) {
  for (var col = 0; col < matrix.length; col++) {
    if (matrix[row][col] > maximum) {
      maximum = matrix[row][col];
    };
  };
};
document.write(' -- ', maximum);

这是我的问题 - 请您帮助我理解为什么当数组中有更多数字时我看不到最高数字 - 请在下面找到一个示例):

const matrix = [
  [2, 56, 10, 14, 422, 3242],
  [20, 34, 55, 100, 33, 422],
  [23, 12, 14, 26, 203, 233]
];
let maximum = matrix[0][0];
for (var row = 0; row < matrix.length; row++) {
  for (var col = 0; col < matrix.length; col++) {
    if (matrix[row][col] > maximum) {
      maximum = matrix[row][col];
    };
  };
};
document.write(' -- ', maximum);

【问题讨论】:

  • 请分享输出。
  • 您的代码错误。 for(var col=0; col&lt;matrix[0].length; col++)应该是这样的。

标签: javascript arrays algorithm loops


【解决方案1】:

row &lt; matrix.length 测试正确的东西。 col &lt; matrix.length 没有:您应该将其替换为 col &lt; matrix[row].length

但是,有一种更简单的方法,使用一些较新的 JavaScript 功能:

const matrix = [[2,56,10,14,422,3242],[20,34,55,100,33,422],[23,12,14,26,203,233]];
const maximum = Math.max(...matrix.flat())
console.log(maximum);

matrix.flat() 会将二维数组展平为一维,... 语法会将一维数组中的每个值作为自己的参数传递给Math.max,然后找到最大的那个。

【讨论】:

  • 我不会打扰测试,但我想知道这是否比 Math .max (... matrix .map (ns =&gt; Math .max (... ns))) 更有效或更低。
【解决方案2】:

有一个小错误。迭代列时,请确保迭代列数。

matrix.length 为您提供行数,matrix[i].length 为您提供列数。

const matrix = [[2,56,10,14,422,3242],[20,34,55,100,33,422],[23,12,14,26,203,233]];
let maximum = matrix[0][0];
for(var row = 0; row < matrix.length; row++){
  for(var col = 0; col < matrix[row].length; col++){
    if(matrix[row][col] > maximum){
      maximum = matrix[row][col];
    };
  };  
};
document.write(' -- ', maximum);

【讨论】:

    【解决方案3】:

    你不接受matrix.length。列也是如此,但它没有给你。行数,即 3,但在你的情况下,但没有。的列是 6 。这就是为什么它只检查 3 个数字

    
    const matrix = [[2,56,10,14,422,3242],[20,34,55,100,33,422],[23,12,14,26,203,233]];
    let maximum = matrix[0][0];
    for(var row = 0; row < matrix.length; row++){
      for(var col = 0; col < matrix[0].length; col++){          <--- Correction
        if(matrix[row][col] > maximum){
          maximum = matrix[row][col];
        };
      };  
    };
    document.write(' -- ', maximum);
    
    

    【讨论】:

      【解决方案4】:

      也可以将Array.prototype.reduce()Math.max()结合使用:

      const matrix = [[2,56,10,14,422,3242],[20,34,55,100,33,422],[23,12,14,26,203,233]]
      
      const maximum = matrix.reduce((a, c) => Math.max(a, ...c), 0)
      console.log(maximum)

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 1970-01-01
        • 2021-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多