給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
高階:如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。
方法一:動態規劃演算法
大問題可以轉化成若干個小問題。
每乙個小問題的結果都和它上乙個小問題有關,而且每乙個小問題的結果能夠儲存利用。
class
solution
if(nums[i]
>max)
}return max;
}}
方法二:分治法
也就是二分法,每次對半,分別找到左邊的最大子串行和和右邊的最大序列和,如果能在分則重複上述操作。當中的關鍵是在合併階段,不僅僅是判斷左右兩邊的最大序列和,還要判斷左右合併後序列中存在更大的子串行和。
在寫遞迴程式的時候考慮兩個問題。
遞迴的結束條件是什麼?
怎麼樣遞迴?(合併階段的邏輯)
class
solution
private
intrecursion
(int
array,
int start,
int end)
int left =
recursion
(array, start,
(start + end)/2
);int right =
recursion
(array,
(start+end)/2
+1,end)
;int max = math.
max(left,right)
;//合併左右區間求該區間的最大子串行和
if(end>start)
}while
(middler<=end)
} max = math.
max(max,
(leftmax+rightmax));
}return max;
}}
LeetCode刷題日記 53 最大子序和
題目給出乙個整數陣列nums,要求在陣列中找到具有最大和的連續子陣列。這裡首先使用暴力求解法,如下 class solution return maxsum 這段 在遇到陣列 2,1 時,會返回0。這是以為對maxsum的初始值設定為0,當實際maxsum比0還小的時候,就會返回0。為了修改這個bu...
LeetCode刷題集 53 最大子序和問題
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6 動態規劃思想 問題拆解 核心為連續子陣列,可以看成乙個區間,可以從起始點和終止點確定乙個子陣列,先確...
LeetCode第152題 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。nums i 1 必然會得到乙個 max值,那麼...