Javascript 给定两个整数数组查找其和等于给定目标数的所有子数组
给定两个整数数组查找其和等于给定目标数的所有子数组。例如,数组1=[1,2,3,4] array2=[7,3,4] sumToFind=5 FindSubArray数组1,数组2,num 输出:[[1,4],[2,3]] 我以下面的方式处理它,但是由于它的复杂性为ON2,所以可以改进它以实现ONJavascript 给定两个整数数组查找其和等于给定目标数的所有子数组,javascript,arrays,Javascript,Arrays,给定两个整数数组查找其和等于给定目标数的所有子数组。例如,数组1=[1,2,3,4] array2=[7,3,4] sumToFind=5 FindSubArray数组1,数组2,num 输出:[[1,4],[2,3]] 我以下面的方式处理它,但是由于它的复杂性为ON2,所以可以改进它以实现ON function findSubArray(array1, array2, sumToFind){ var len1 = array1.length; var len2 = array2.len
function findSubArray(array1, array2, sumToFind){
var len1 = array1.length;
var len2 = array2.length;
var result=[];
for(var i=0;i<len1;i++){
for(var j=0;j<len2;j++){
if(array1[i] + array2[j] === sumToFind){
result.push([array1[i], array2[j]]);
}
}
}
return result;
}
我不确定这是否可以在上实现,但我得到了一个解决方案,其复杂性为Onlgn,这是排序算法的时间复杂性
var findSubArray2 = function(arr1, arr2, sumToFind) {
var result = [];
var sortedArr1 = arr1.sort(); // O(nlgn)
var sortedArr2 = arr2.sort(); // O(mlgm)
// Use two pointers to check element in each array.
// O(n + m)
for (var i = 0, j = arr2.length - 1; i < arr1.length && j >= 0;) {
var temp = sortedArr1[i] + sortedArr2[j];
if (temp > sumToFind) {
j--;
} else if (temp < sumToFind) {
i++;
} else {
result.push([sortedArr1[i], sortedArr2[j]]);
i++;
}
}
return result;
}
注1:如果数组1和数组2是排序数组,则可能是Om+n
注2:不确定默认的排序方法是哪种算法,但我认为它不会在2上实现。看
希望这是有用的。我投票结束这个问题,因为它是在问如何优化已经运行的代码。这是否属于代码审查?