javascript - 在二维数组中查找 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
总是矩形的,每一行的列数都是一样的
解决方案
根据问题中的评论,我能想到的唯一最小优化是缓存数组的长度以避免在每次迭代中访问它们,并且用于比较的 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];
}
推荐阅读
- c# - 如果今天的日期没有记录,如何发出警报
- swift - 将子视图控制器定位在父视图中
- sql - 使用 TSQL 连接在 STUFF 的字段名称中添加空格
- amazon-s3 - aws cognito - 允许群聊参与者访问 s3 存储桶
- javascript - React/HTML/CSS 按钮文本不以移动设备为中心;在所有桌面浏览器上都能正常工作
- java - setEnabled 在 Android 中的某些设备上不起作用
- ruby-on-rails - Graphql 突变错误:“字段‘createUser’缺少必需的参数:输入”
- python - 无法更改@everyone 的权限?
- c++ - 如何修复 SigSegV
- html - HTML 按钮间歇性工作