首页 > 解决方案 > 在二维数组中查找 argmax 的最快方法

问题描述

JavaScript 对我来说远非一门熟悉的语言。我有一条逻辑我正在尝试优化速度。它包括找到二维数组(矩形)的 argmax、行和列索引。目前,我有一个幼稚的实现

function argMax2d(arr) {
  var rowMax = 0, colMax = 0;
  for( var rowIndex = 0; rowIndex < arr.length; rowIndex++){
    for( var colIndex = 0; colIndex < arr[rowIndex].length; colIndex++){
      if (arr[rowIndex][colIndex] > arr[rowMax][colMax]){
        rowMax = rowIndex;
        colMax = colIndex;
      }
    }
  }
  return [rowMax, colMax];
}

在 Python 中,由于没有使用数据的连续性,这将是完成工作的一种非常缓慢的方式。

PS:arr总是矩形的,每一行的列数都是一样的

标签: javascriptarraysoptimization

解决方案


根据问题中的评论,我能想到的唯一最小优化是缓存数组的长度以避免在每次迭代中访问它们,并且用于比较的 maxValue 也是如此。

    function argMax2d(arr) {
      var rowMax = 0,
          colMax = 0,
          vLength = arr.length,
          hLength = arr[0].length,
          maxValue = -Infinity;
          
      for (var rowIndex = 0; rowIndex < vLength; rowIndex++) {
        for (var colIndex = 0; colIndex < hLength; colIndex++) {
          if (arr[rowIndex][colIndex] > maxValue) {
            maxValue = arr[rowIndex][colIndex];
            rowMax = rowIndex;
            colMax = colIndex;
          }
        }
      }
      
      return [rowMax, colMax];
    }

JS性能对比


推荐阅读