我已经编写了一个函数并在内部调用了另一个函数,但是我的测试表明它没有经过时间优化。如何使以下代码更快?
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); }
完整的工作代码基于@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; }