比较两个整数数组并返回每个数组中较高对应整数的唯一数组的最有效方法是什么?
(可使用寄屋)
例:
var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];
// result = [1, 1, 2, 3, 0];发布于 2015-09-18 16:30:23
function selectHighestValues (arr1, arr2) {
var maxLength = Math.max(arr1.length, arr2.length);
var _arr = [];
for (var i = 0; i < maxLength; i++) {
if (arr1[i] && arr2[i]) {
_arr[i] = Math.max(arr1[i], arr2[i]);
} else if (arr1[i]) {
_arr[i] = arr1[i];
} else {
_arr[i] = arr2[i];
}
}
return _arr;
}通过剪接最长的数组和连接:
function selectHighestValues (arr1, arr2) {
var minLength = Math.min(arr1.length, arr2.length);
var maxLength = Math.max(arr1.length, arr2.length);
var longestArrayIndex = arr1.length > arr2.length ? 0 : 1;
var _arr = [];
for (var i = 0; i < minLength; i++) {
_arr[i] = Math.max(arr1[i], arr2[i]);
}
if (maxLength > minLength) {
var sliced = Array.prototype.slice.call(arguments[longestArrayIndex], minLength, maxLength);
_arr = Array.prototype.concat.call(_arr, sliced);
}
return _arr;
}发布于 2015-09-18 16:35:47
下面是我的第一个效率较低的方法:
var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];
arr1.map(function (item, i) {
return Math.max(item, arr2[i])
}); // [1, 1, 2, 3, 0]它所缺乏的是速度,它从美丽中获得!
或者对你来说,ES6狂人:
var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];
arr1.map((item, i) => Math.max(item, arr2[i])); // [1, 1, 2, 3, 0]发布于 2015-09-18 16:30:19
蛮力!
var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];
var result = [];
for(var i = 0; i < arr1.length; i++) {
if (arr1[i] > arr2[i]) {
result.push(arr1[i]);
} else {
result.push(arr2[i]);
}
}https://stackoverflow.com/questions/32656782
复制相似问题