我有js函数来查找2d数组中的最小值和最大值,这在小数组上运行正常但是当我传递大数组时它会给我 @Override
protected void onResume() {
super.onResume();
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.setAccountName("yourmaild@gmail.com")
.addScope(Drive.SCOPE_FILE)
.addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
mGoogleApiClient.connect();
}
:
超出了最大调用堆栈大小。
我使用的是最新版本的Chrome。
range error
答案 0 :(得分:3)
list(map(str,sorted(map(int,heights.rstrip('-').split()))))
和Math.min
都是递归操作,很可能在大数组(〜10⁷)时崩溃。
相反,您可以像这样使用旧的javascript循环:
(第二个功能要快得多)
Math.max
或
function getMax(arr) {
return arr.reduce((max, v) => max >= v ? max : v, -Infinity);
}
*经过1,000,000项测试:
第一功能运行时间(在我的计算机上)为15.84msVs。第二功能只有4.32毫秒。
答案 1 :(得分:1)
请改为尝试:
function minMax2DArray(arr, idx) {
var max = Number.MIN_VALUE,
min = Number.MAX_VALUE;
arr.forEach(function(e) {
if (max < e[idx]) {
max = e[idx];
}
if (min > e[idx]) {
min = e[idx];
}
});
return {max: max, min: min};
}
答案 2 :(得分:1)
bjornl的回答有一个问题。根据{{3}}
MIN_VALUE属性是最接近0的数字,而不是JavaScript可以表示的最负数。
更新的代码:
function minMax2DArray(arr, idx) {
var max = -Number.MAX_VALUE,
min = Number.MAX_VALUE;
arr.forEach(function(e) {
if (max < e[idx]) {
max = e[idx];
}
if (min > e[idx]) {
min = e[idx];
}
});
return {max: max, min: min};
}