動(dòng)態(tài)規(guī)劃算法入門_python3


有這一道題,計(jì)算給定字符串中最大子符串的和频鉴,如 10 ,-2 ,3相恃,4返回其最大子串的和,思路丸升,假設(shè)這個(gè)子串第i位的和為dp[i]界赔,則第i-1位的和為 dp [i-1]



最大子序和

給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素)雏吭,返回其最大和锁施。

示例:

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

輸出: 6

解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6杖们。

題目分析

先說(shuō)下我之前的復(fù)雜思路:因?yàn)閿?shù)組中可能有正有負(fù)悉抵,先將連續(xù)正、或連續(xù)負(fù)的數(shù)合并摘完,這樣列表如果全正姥饰、最大和為數(shù)組和;如果列表全負(fù)孝治、最大和為最大的單項(xiàng)值列粪;如果有正有負(fù)、合并后就會(huì)正負(fù)相間谈飒,通過(guò)比較相鄰正負(fù)相加后的結(jié)果來(lái)判斷是否計(jì)入最大和中岂座。

聽著很繞,實(shí)施起來(lái)也不簡(jiǎn)單杭措,費(fèi)白天功夫费什、通過(guò)各種特例補(bǔ)全了整個(gè)代碼思路。接下來(lái)我們對(duì)比看下動(dòng)態(tài)規(guī)劃的設(shè)計(jì)手素。

首先要設(shè)計(jì)狀態(tài)鸳址,dp [ i ] 我們定義為以數(shù)組 nums [ i ] 結(jié)尾的連續(xù)子數(shù)組的最大和——可能我們會(huì)有疑問(wèn)赘那,這個(gè)狀態(tài)怎么找的?注意氯质,動(dòng)態(tài)規(guī)劃最關(guān)鍵的就是找準(zhǔn)狀態(tài)和狀態(tài)轉(zhuǎn)移方程募舟,如何找準(zhǔn)這個(gè)要么憑理論分析、要么就是多做題積累經(jīng)驗(yàn)闻察。這也是我們翻看很多講解拱礁、分析老是說(shuō)動(dòng)態(tài)規(guī)劃不難、很簡(jiǎn)單的原因:因?yàn)槿思业姆e累和經(jīng)驗(yàn)在那擺著辕漂,見怪不怪了呢灶,對(duì)于剛接觸這類題型的我們就好奇寶寶似的滿腦袋問(wèn)號(hào)。如果還記得昨天做過(guò)的背包問(wèn)題钉嘹,也是定義了類似在 i 位置的背包最大價(jià)值鸯乃,這里定義要以 i 位置結(jié)尾的子數(shù)組,就是為了可以和 dp [ i-1 ] 建立直接聯(lián)系跋涣。

有了上面的狀態(tài)定義缨睡,找狀態(tài)轉(zhuǎn)移方程就會(huì)輕松些,在計(jì)算 dp[ i ] 時(shí)陈辱,我們可以拿到的有以 nums[i-1] 項(xiàng)結(jié)尾的子數(shù)組的最大和 dp[i-1] 和 nums[ i ]奖年。根據(jù)狀態(tài)定義,以 nums[i] 結(jié)尾的子數(shù)組沛贪,那么計(jì)算和一定有 nums[i] 參與陋守,再看之前的項(xiàng),倘若 dp[i-1] 為負(fù)利赋,那么最大和就不必添加這部分水评;但如果其為正,則將其加入進(jìn)來(lái)即可媚送。完畢~

是的中燥,這就完事了,上代碼季希。

代碼實(shí)現(xiàn)

class Solution:

? ? def maxSubArray(self, nums: List[int]) -> int:

? ? ? ? n = len(nums)

? ? ? ? # 對(duì)單項(xiàng)數(shù)組單獨(dú)處理

? ? ? ? if n==1:

? ? ? ? ? ? return nums[0]

? ? ? ? # dp[i] 為以 nums[i] 結(jié)尾的連續(xù)子數(shù)組最大和

? ? ? ? dp = [0]*n

? ? ? ? # 初始化 dp 數(shù)組為 n 個(gè) 0 的列表

? ? ? ? dp[0] = nums[0]

? ?

? ? ? ? # 遍歷每一位

? ? ? ? for i in range(1,n):

? ? ? ? ? # dp[i-1]即以 nums[i-1] 結(jié)尾的子數(shù)組最大和

? ? ? ? ? # 如果 dp[i-1] 非正褪那,則不加

? ? ? ? ? ? if dp[i-1]<=0:

? ? ? ? ? ? ? ? dp[i] = nums[i]

? ? ? ? ? ? # 如果正,則加起來(lái)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? dp[i] = dp[i-1]+nums[i]

? ? ? ? # 返回 dp 記錄列表的最大值

? ? ? ? return max(dp)

因?yàn)槲覀兺ㄟ^(guò)對(duì) n 位數(shù)組的一次遍歷建立了所謂的狀態(tài)列表式塌,最后執(zhí)行了次求最大值運(yùn)輸博敬,整體時(shí)間復(fù)雜度與 n 成線性關(guān)系,即 O(n) 時(shí)間復(fù)雜度峰尝;在整個(gè)過(guò)程中偏窝,額外建立了 dp 這個(gè)長(zhǎng)度為 n 的數(shù)組或列表,空間復(fù)雜度也為 O(n)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祭往,一起剝皮案震驚了整個(gè)濱河市伦意,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硼补,老刑警劉巖驮肉,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異已骇,居然都是意外死亡离钝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門褪储,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卵渴,“玉大人,你說(shuō)我怎么就攤上這事鲤竹±硕粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辛藻,是天一觀的道長(zhǎng)碘橘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)揩尸,這世上最難降的妖魔是什么蛹屿? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮岩榆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坟瓢。我一直安慰自己勇边,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布折联。 她就那樣靜靜地躺著粒褒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诚镰。 梳的紋絲不亂的頭發(fā)上奕坟,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音清笨,去河邊找鬼月杉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抠艾,可吹牛的內(nèi)容都是我干的苛萎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腌歉!你這毒婦竟也來(lái)了蛙酪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翘盖,失蹤者是張志新(化名)和其女友劉穎桂塞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馍驯,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阁危,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泥彤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲芹。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吟吝,靈堂內(nèi)的尸體忽然破棺而出菱父,到底是詐尸還是另有隱情,我是刑警寧澤剑逃,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布浙宜,位于F島的核電站,受9級(jí)特大地震影響蛹磺,放射性物質(zhì)發(fā)生泄漏粟瞬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一萤捆、第九天 我趴在偏房一處隱蔽的房頂上張望裙品。 院中可真熱鬧,春花似錦俗或、人聲如沸市怎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)区匠。三九已至,卻和暖如春帅腌,著一層夾襖步出監(jiān)牢的瞬間驰弄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工速客, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戚篙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓挽封,卻偏偏與公主長(zhǎng)得像已球,于是被迫代替她去往敵國(guó)和親臣镣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容