LeetCode53 最大子序和

題目: 給定一個(gè)整數(shù)數(shù)組 nums 资厉,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素)兜辞,返回其最大和。

看到這題一開始想到的是用遞歸的方法:
假設(shè) 我們可以求出數(shù)組的最大序列, 我們就能得出數(shù)組兩個(gè)子序列的最大值, 然后與自身的和比較, 如果自身總和小于兩個(gè)子序列的最大值, 則返回子序列最大值為最終結(jié)果, 當(dāng)子序列長度不大于二, 則終止遞歸, 直接求出最大子序列返回

    func maxSubArray_1(_ nums: [Int]) -> Int {

        if nums.count > 2 {
            let count = 0
            for num in nums {
                count += num
            }
            let left = self.maxSubArray_1(Array(nums[0..<(nums.count - 1)]))
            let right = self.maxSubArray_1(Array(nums[1...(nums.count - 1)]))
            var max = left > right ? left : right
            max = max > count ? max : count
            return max

        } else {

            let left = nums[0]
            let right = nums[nums.count - 1]
            let count = 0
            for num in nums {
                count += num
            }
            var max = left > right ? left : right
            max = max > count ? max : count
            return max
        }
    }

無奈遞歸的時(shí)間復(fù)雜度太高, 要通過必須要使用一個(gè)O(n)復(fù)雜度的方法
求助Google得到一個(gè)掃描法, 時(shí)間復(fù)雜度為O(n)
思路是這樣, 我們從數(shù)組的最左邊開始掃描, 將第一個(gè)元素設(shè)置為最大和, 以及子數(shù)組最左邊的元素
當(dāng)這個(gè)最左邊的元素為負(fù)數(shù)時(shí), 這是他對最大和是起負(fù)作用的, 我們就將下標(biāo)右移, 令下一個(gè)元素成為子數(shù)組其實(shí)元素, 并比較當(dāng)前最大值與下一個(gè)元素的大小, 如果下一個(gè)元素直接大于當(dāng)前最大值, 則重新賦值, 否則暫時(shí)保留. 直到我們找到一個(gè)元素為正數(shù), 這時(shí)候我們可以開始將其與下一個(gè)元素相加, 得到新的"current"子序列和, 如果這時(shí)子序列和為負(fù)數(shù), 說明他不會對接下來的序列擴(kuò)展起到正向效果, 那么我們先比較此時(shí)的最大和與之前的最大和的大小, 保存當(dāng)前掃描到的最大和, 然后棄掉現(xiàn)在的起始位置, 取下一個(gè)位置當(dāng)做起始位置, 開始掃描.
這種方式只需要一次掃描就可以得到結(jié)果, 但是真的不容易想出來...
代碼如下

    func maxSubArray(_ nums: [Int]) -> Int {
        if nums.count > 1 {
            var current = nums[0]
            var sum = nums[0]
            for index in 1..<nums.count {
                if current < 0 {
                    current = nums[index]
                } else {
                    current += nums[index]
                }
                if current > sum {

                    sum = current
                }
            }
            return sum
        } else {
            return nums[0]
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窑睁,老刑警劉巖挺峡,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異担钮,居然都是意外死亡橱赠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門箫津,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狭姨,“玉大人,你說我怎么就攤上這事苏遥”模” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵田炭,是天一觀的道長师抄。 經(jīng)常有香客問我,道長教硫,這世上最難降的妖魔是什么叨吮? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮瞬矩,結(jié)果婚禮上茶鉴,老公的妹妹穿的比我還像新娘。我一直安慰自己景用,他們只是感情好涵叮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般围肥。 火紅的嫁衣襯著肌膚如雪剿干。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天穆刻,我揣著相機(jī)與錄音置尔,去河邊找鬼。 笑死氢伟,一個(gè)胖子當(dāng)著我的面吹牛榜轿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朵锣,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谬盐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诚些?” 一聲冷哼從身側(cè)響起飞傀,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诬烹,沒想到半個(gè)月后砸烦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绞吁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年幢痘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家破。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颜说,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汰聋,到底是詐尸還是另有隱情门粪,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布烹困,位于F島的核電站庄拇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏韭邓。R本人自食惡果不足惜措近,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望女淑。 院中可真熱鬧瞭郑,春花似錦、人聲如沸鸭你。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阁谆,卻和暖如春碳抄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背场绿。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工剖效, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人焰盗。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓璧尸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親熬拒。 傳聞我的和親對象是個(gè)殘疾皇子爷光,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

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