53 最大子序和

2021-10-05 17:11:49 字數 1363 閱讀 9452

[53. 最大子序和]

難度 簡單

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

高階:

如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。

解法一:貪心演算法

若當前所指元素之前的和小於0,則丟棄當前元素之前的數列

class

solution

int cur_sum, ans;

cur_sum = ans = nums[0]

;for

(int i =

1; i < len; i++

)else

ans = math.

max(ans, cur_sum);}

return ans;

}}

解法二:動態規劃

狀態轉移方程:f(i) = max

自底向上

class

solution

int ans = nums[0]

;//儲存最大子序和

int[

] dp =

newint

[nums.length]

;//輔助陣列

dp[0]

= nums[0]

;for

(int i =

1; i < nums.length; i++

)return ans;

}}

自頂向下

class

solution

ans = nums[0]

;dp(nums, len -1)

;return ans;

}private

intdp

(int

nums,

int i)

int temp = math.

max(

dp(nums, i -1)

+ nums[i]

, nums[i]);

ans = math.

max(ans, temp)

;return temp;

}}

解法三:分治法

待補充…

53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。兩個變數,乙個是ans,用來儲存 更新子串行 乙個maxn,始終儲存著當前最大的子串行。子串行...

53 最大子序和

題目 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。思路 因為要考慮連續,所以需注意兩點,與當前比較的必定包含當前節點的上乙個節點,前n個節點...

53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。package le...