LeetCode P53題解 動態規劃

2022-01-10 19:47:44 字數 944 閱讀 4047

找出連續子區間最大和,至少包含乙個數

例如:[-2,1,-3,4,-1,2,1,-5,4],則子區間[4,-1,2,1]有最大和為6

如上圖p1.1:

最優解一定為一段連續的區間,則可以有o(n*n)的解法,即遍歷所有的區間找出最大值

設sum[i]為區間[1,i]的和,初始化處理

最優解=max(sum[i]-sum[j]), (0<=i,j假設最大區間和為上圖紅色區域,可以看出,點i一定是該區間最右邊節點;

圖p1.2

為什麼一定要以i結尾?

因為f[i]為一維陣列,不加這個條件,則f[i]無法表示出前面的狀態,只知道前i個節點的最優解,但不知道最優解從**開始

如果已經求出i個節點的最大區間和,則增加乙個節點i+1時,前i+1個節點的最優解只有兩種情況

1)i+1不在最優解區間中,這種情況和只有i個節點是一樣的

2)i+1在最優解區間中, 這和情況i+1一定是最優解的最右邊節點,又分兩種情況

2-1) 前i個節點的最優解為負數,則捨棄前面的和,因為加上前面的和會更小

f[i+1]=f[i]+line[i+1]

2-2) 前i個節點的最優解為正數,則加上前面的和,因為加上前面的和會更大

f[i+1]=line[i+1]

github: 

class

solution

int maxsubarray(vector &nums)

return

maxanswer;}};

leetcode 動態規劃 53

本菜雞看題目第一眼就暗喜,這還不簡單嘛,直接滑窗滑過去,記錄下最大的窗就可以了嗎。視窗左節點在滿足下面兩種條件的情況下,會向後移動。本次滑窗內的連續陣列和小於等於零 本次滑窗的右節點移動到末尾 直接手擼 如下,輕鬆通過三個測試案例 nums 2,1,3,4,1,2,1,5,4 left,right ...

動態規劃 leetcode 53

0 python資料結構與演算法學習路線 學習內容 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6 1 不可避免的是要遍歷陣列,所以先寫...

csp s模擬測試53u,v,w題解

題面 u 用差分優化修改 二維差分 給 x1,y1 x2,y2 加上s d x1 y1 s,d x1 y2 1 s,d x2 1 y1 s,d x2 1 y2 1 s 定義2個差分陣列d1,d2,分別記錄豎列和斜邊的差分 d1 r c s,d1 r l 1 c s,d2 r c 1 s,d2 r l...