所以我找到了這個數學問題的解決方案,就是這個
function getMaxSubSum(arr) {
let maxSum = 0;
let partialSum = 0;
for (let item of arr) { // for each item of arr
partialSum = item; // add it to partialSum
maxSum = Math.max(maxSum, partialSum); // remember the maximum
if (partialSum < 0) partialSum = 0; // zero if negative
}
return maxSum;
}
alert ( getMaxSubSum([1,-2,3,9,-9,6]) )
但我想用另一種方式來實作它,我正在嘗試這段代碼
function kadane () {
arr = [1,-2,3,9,-9,6]
let maxSub = maxGlobal = arr[0]
for (i=3 ; i<arr.length-1; i ) {
maxSub = Math.max(arr[i], maxSub arr[i])
if (maxSub > maxGlobal) {
maxSub = maxGlobal
}
}
return maxSub
}
alert (kadane())
有誰知道我做錯了什么?
uj5u.com熱心網友回復:
您的解決方案非常接近!
在這里,您倒置maxSub并maxGlobal在該if部分中。
另外,我不知道為什么,但是您的 for 回圈從 3 而不是 1 開始。
這是您的作業示例
function kadane(arr) {
let maxSub = arr[0]
let maxGlobal = arr[0]
for (i = 1; i < arr.length; i ) {
maxSub = Math.max(arr[i], maxSub arr[i])
if (maxSub > maxGlobal) {
maxGlobal = maxSub
}
}
return maxGlobal
}
const arr = [1, -2, 3, 9, -9, 6]
alert(kadane(arr))
再來一點...
另外,請注意,您也可以連續檢查最多 2 個數字。
使用Array#reduce的示例
function kadane(arr) {
return arr.reduce((acc, curr, index) => {
if(index === 0) return curr > 0 ? curr : 0
else {
const sum = curr arr[index-1]
return sum > acc ? sum : acc
}
}, 0)
}
console.log(kadane([1, -2, 3, 9, -9, 6]))
console.log(kadane([-1, -2, -3, -4, -5, -6]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478720.html
標籤:javascript
