Javascript 给定两个整数数组查找其和等于给定目标数的所有子数组

Javascript 给定两个整数数组查找其和等于给定目标数的所有子数组,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

给定两个整数数组查找其和等于给定目标数的所有子数组。例如,数组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.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上实现。看


希望这是有用的。

我投票结束这个问题,因为它是在问如何优化已经运行的代码。这是否属于代码审查?