給定乙個整數陣列nums
,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
高階:
如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。
其實這個演算法很好理解,但是看起來挺複雜的,所以很垃圾,因為這是我自己寫的。。。
主要思想就是遍歷陣列的時候,我們在什麼情況下才會將陣列中間的數當作子串行的開頭呢?顯然,那就是在這個數之前的所有數的和為負數的情況下。遇到這種情況,說明我們叫從下乙個數重新開始了,特殊情況就是整個陣列都是負數的情況,那麼每次都要重新開始,其實就是找出陣列中最大的負數。
如果遍歷到的數小於0
最後就得到了最大的和
func maxsubarray(nums int) int
} else
}// 當前遍歷到的是負數,直接先把最大的資料計算儲存
if cur >= max
// 如果加上這個負數沒有小於0,那麼就可以繼續加
if cur+value >= 0 else
} }return max
}
秒啊。。。
其實很簡單,就是找出整個陣列中,每個元素作為子串行的最後乙個數的最大的和
func maxsubarray(nums int) int
if nums[i] > max
}return max
}
leetcode之53最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。第一種解法複雜度...
LeetCode 53 最大子串和 DP
題意 給定乙個整數序列,找乙個具有最大和的連續子串。思路 動態規劃。最近做的滑動視窗題比較多,我一開始想了半天滑動視窗,但是這題明顯不是,因為沒有判斷條件。此題要o n 複雜度,所以肯定不能同時列舉起點和終點,所以只列舉重點。dp i 代表的是以 第i個數字為結尾的最大連續子串長度。狀態轉移方程 d...
LeetCode53最大子序和
給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...