Javascript “获取错误”;中止调用";在解决最大子阵列问题时

Javascript “获取错误”;中止调用";在解决最大子阵列问题时,javascript,arrays,dynamic-programming,Javascript,Arrays,Dynamic Programming,因此,问题是给定一个数组,我们必须在其中找到最大可能和: 所有非空子阵列 所有非空子序列 示例: 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 maxSubarra

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

  • 所有非空子阵列
  • 所有非空子序列
  • 示例: 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
        
        
        }
    
    函数最大子阵列(arr){
    设子序列um=0
    for(设i=0;i{
    返回和+曲线
    }, 0)
    总推力
    }
    设subraysum=Math.max(…sumofeachsubar)
    常量结果=[]
    结果推送(子阵列和、子序列)
    console.log(结果)
    返回结果
    }
    
    代码在哪里执行(即执行的上下文)?铬?节点?在线益智检查器?在查看您的算法之前,
    Math.max(…arr)
    can。不要在>50k个元素的数组上使用它(MDN说在一个实现上有限制)。查看您的算法后,有三个嵌套循环O(n^3)来构建
    所有子数组
    。可能不会剪切它。@user2864740 hackerrank
    slice
    运行一个循环时出现问题,它是O(n),这是三重嵌套的,因为它位于绑定到
    n
    的两个
    for
    循环中。如果是黑客银行问题,提供链接会很有帮助。@ggorlen我的问题是导致此错误的代码中有什么内容。它没有因为超时而终止,因此运行时间可能不是实际原因。不管怎么说,在线性时间内,有更多的策略来解决这个问题,比如Kadane的算法。