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
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 hackerrankslice
运行一个循环时出现问题,它是O(n),这是三重嵌套的,因为它位于绑定到n
的两个for
循环中。如果是黑客银行问题,提供链接会很有帮助。@ggorlen我的问题是导致此错误的代码中有什么内容。它没有因为超时而终止,因此运行时间可能不是实际原因。不管怎么说,在线性时间内,有更多的策略来解决这个问题,比如Kadane的算法。