53. 最大子序和

給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。

思路:遞歸實(shí)現(xiàn),時(shí)間復(fù)雜度為O(nlogn)。
分治的思想:最大子序列和可能出現(xiàn)在三處?;蛘哒麄€(gè)出現(xiàn)在輸入數(shù)據(jù)的左半部,或者整個(gè)出現(xiàn)右半部,或者跨越輸入數(shù)據(jù)的中部從而占據(jù)左右兩個(gè)半部分。前兩種情況遞歸求解。第三種情況的最大和可以通過求出前半部分的最大和(包含前半部分的最后一個(gè)元素)以及后半部分的最大和(包含后半部分的第一個(gè)元素)而得到,然后將這兩個(gè)和加在一起,求出三個(gè)值的最大值。

func maxSubArray(nums []int) int {
    return divide(nums, 0, len(nums)-1)

}

func divide(nums []int, left, right int) int {
    if left == right {
        return nums[left]
    }

    mind := (left + right) / 2
    maxLeftSum := divide(nums, left, mind)
    maxRightSum := divide(nums, mind+1, right)

    var maxMindLeftSum, mindLeftSum int
    for i := mind; i >= left; i-- {
        mindLeftSum += nums[i]
        if mindLeftSum > maxMindLeftSum {
            maxMindLeftSum = mindLeftSum
        }
    }

    var maxMindRightSum, mindRightSum int
    for i := mind + 1; i <= right; i++ {
        mindRightSum += nums[i]
        if mindRightSum > maxMindRightSum {
            maxMindRightSum = mindRightSum
        }
    }
    var max int

    if maxLeftSum > maxRightSum {
        max = maxLeftSum
    } else {
        max = maxRightSum
    }
    if max < maxMindRightSum+maxMindLeftSum && maxMindRightSum+maxMindLeftSum != 0 {
        max = maxMindRightSum + maxMindLeftSum
    }
    return max
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 給定一個(gè)整數(shù)數(shù)組nums,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 示例: 輸入:...
    Y_d89b閱讀 703評(píng)論 0 0
  • 周末好! 前兩天由于開題報(bào)告暫停了一下,今天我們繼續(xù)來刷題. 今天是一道簡(jiǎn)單難度的題, 認(rèn)真考慮好可能的情況, 把...
    FesonX閱讀 480評(píng)論 0 4
  • 題目描述: 給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。...
    夜空中最亮的星_6c64閱讀 92評(píng)論 0 1
  • 給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 示例: 輸...
    DAFFE閱讀 252評(píng)論 0 0
  • 給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 示例: 輸...
    煮飯_阿姨閱讀 188評(píng)論 0 0

友情鏈接更多精彩內(nèi)容