LeetCode 第53題 最大子串行和

2021-10-09 14:38:58 字數 1131 閱讀 9475

給定乙個整數陣列 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值,那麼...