提问者:小点点

如何加速减少和预防措施?


我写了一个程序来计算数组项的范围的和,但是仍然不能通过测验,因为我的代码太慢了:“执行超时(12000毫秒)”谁能说我如何加速我的代码来通过测验呢?

问答-https://www.codewars.com/kata/583d171f28a0c04b7c00009c/train/JavaScript

null

function maxSum(arr,range){
  let result =-Infinity
  range.forEach(el=>{
    let sumArr = arr.slice(el[0],el[1]+1).reduce((a,b)=>a+b)
    sumArr>result && (result=sumArr)
  })
  console.log(result)
return result 
}
maxSum([1,-2,3,4,-5,-4,3,2,1],[[0,8],[1,3],[0,4],[6,8]])

null


共1个答案

匿名用户

这里有一个更快更简单的解决方案。 在range上只迭代一次并收集所有总和,然后将其映射到总和范围,然后返回最大值:

null

function maxSum(arr, range) {
  let left = [0];
  let total = 0;
  
  for (let num of arr) {
    left.push(total += num);
  }

  let sums = range.map(([a, b]) => left[b + 1] - left[a]);
  
  let result = Math.max(...sums);
  console.log(result);
  return result;
}

maxSum([1, -2, 3, 4, -5, -4, 3, 2, 1], [[0, 8], [1, 3], [0, 4], [6, 8]]);