題目描述:給定整數陣列 nums,找出具有最大總和的連續子陣列,並回傳其總和。
解題思路:Kadane's Algorithm 是此題的經典解法。維護兩個變數:currentSum(以當前元素結尾的最大子陣列和)和 maxSum(全域最大值)。對每個元素,選擇「加入前一個子陣列」或「從當前元素重新開始」中較大者。關鍵觀察:若前面的累積和為負,對後面只有拖累,不如從新元素重新開始。
時間複雜度:O(n) — 單次線性掃描。
空間複雜度:O(1) — 只用兩個常數變數。
1. Set currentSum = nums[0], maxSum = nums[0] 2. For i from 1 to n-1: a. currentSum = max(nums[i], currentSum + nums[i]) b. maxSum = max(maxSum, currentSum) 3. Return maxSum
分治 O(n log n):分割陣列,找左半的最大子陣列、右半的、以及跨越中點的。優雅但遜於 Kadane's。
帶追蹤的 DP:同 Kadane's 但額外追蹤索引以回傳實際子陣列,不只是和。