一尘不染

函数内JavaScript函数调用的更快算法

algorithm

我已经编写了一个函数并在内部调用了另一个函数,但是我的测试表明它没有经过时间优化。如何使以下代码更快?

    function maxSum(arr, range) {


        function sumAll(array1, myrange) {

            var total = 0;

            if (Array.isArray(myrange)) {
                for (var i = myrange[0]; i <= myrange[1]; i++) {

                    total += array1[i];
                }

                return total;
            } else return array1[myrange];
        }

        var mylist = [];
        var l = range.length;


        for (var n = 0; n < l; n++) {
            mylist.push(sumAll(arr, range[n]));
        }

        return Math.max.apply(null, mylist);


    }

阅读 208

收藏
2020-07-28

共1个答案

一尘不染

完整的工作代码基于@MBo的出色优化。这通过了所有测试,网址https://www.codewars.com/kata/the-maximum-sum-
value-of-ranges-challenge-
version/train/javascript,我收集了这个问题的出处。

function maxSum(arr, ranges) {
  var max = null;

  var sums = [];
  var sofar = 0;
  for (var i = 0; i <= arr.length; i++) {
    sums[i] = sofar;
    sofar += arr[i];
  }

  for (var i = 0; i < ranges.length; i++) {
    var sum = sums[ranges[i][1]+1] - sums[ranges[i][0]];
    if (max === null || sum > max) {
      max = sum;
    }
  }

  return max;
}
2020-07-28