首页 > 解决方案 > 解决最大子数组问题时出现错误“Abort Called”

问题描述

所以问题是给定一个数组,我们必须找到其中的最大可能和:

  1. 所有非空子数组。
  2. 所有非空子序列。

示例: arr = [-1,2,3,-4,5,10]

最大子数组和由索引 [1-5] 处的元素组成 它们的和为 2+3+-4+5+10 =16 最大子序列和由索引 [1,2,4,5] 处的元素组成,并且他们的总和是 [2,3,5,10] = 20

我尝试解决这个问题。但对于大型数组(长度> 50k),我收到错误“Abort Called”。这个错误背后的原因是什么?!是不是我的代码没有优化?

 function maxSubarray(arr) {
      let subsequenceSum = 0
    
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] < 0 ) continue
        else subsequenceSum += arr[i]
    
      }
      if (!subsequenceSum) {
        subsequenceSum = Math.max(...arr)
      }
    
      const allsubArrays = []
      const sumOfEachSubArr = []
    
      for (let i = 0; i < arr.length; i++) {
        for (let j = i ; j < arr.length; j++) {
          const tempArr = arr.slice(i, j+1)
          allsubArrays.push(tempArr)
        }
      }
     
    
      // Getting sum of all subarrays
      for (let subArr of allsubArrays) {
        let sum = subArr.reduce((sum, curVal) => {
          return sum + curVal
        }, 0)
        sumOfEachSubArr.push(sum)
      }
      let subArraySum = Math.max(...sumOfEachSubArr)
    
      const result = []
      result.push(subArraySum,subsequenceSum )
      console.log(result)
      return result
    
    
    }

标签: javascriptarraysdynamic-programming

解决方案


推荐阅读