53. 最大子序和
最大子序和
給定一個整數(shù)數(shù)組 nums ,找到一個具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個元素),返回其最大和。
- 示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6 。 - 示例 2:
輸入:nums = [1]
輸出:1
解題思路
說實(shí)話,一開始拿到這道題目還真不知道如何下手。但是有一種暴力的方法肯定可以,就是遍歷唄誰不會呢。也就是正著思考,按個暴力遍歷,看看以第i個元素開頭的最大子序列是多少??梢允强梢?#xff0c;但是效率肯定低壓
想著想著不知不覺間想到了具體數(shù)學(xué)里面的一些思考方式。我們可以先拿小的來進(jìn)行實(shí)驗(yàn),觀察他們直接的關(guān)系
假設(shè)只有一個元素,肯定結(jié)果就是那一個元素,如果是兩個以及上呢?
假設(shè)有n個我們可以從頭到尾依次增加,下面表示序列長度
1
2
3
4
…
n-1
n
我們用一個變量max來存儲,最大子序和。
首先,max肯定等于第一個元素呀。因?yàn)橹挥幸粋€嘛
當(dāng)二個的時候,有三種情況,第一個元素是最大子序和,第二個元素是最大子序和或者兩元素之和為最大子序和。第一個元素我們已經(jīng)用max存儲起來了。下面只需要將第二個元素與兩元素之和比較過后的最大值與max進(jìn)行比較即可。
思考一下我們會發(fā)現(xiàn),以第i個數(shù)為結(jié)尾的子序和中的最大值,無非就第i個數(shù)自己 或者 以第i-i個數(shù)結(jié)尾的子序和中的最大值和第i個數(shù)的和
例如:
[-2 , 1, -3, 4, -1, 2, 1, -5, 4]
從第0個到最后一個以第i個元素結(jié)尾的最大子序和為:**-2 -1 -3 4 3 5 6 1 5 **, 其中的最大值6,就是整個序列的最大子序和。
思考道這里我們是不是就會發(fā)現(xiàn),將數(shù)組遍歷過后,以第i個數(shù)結(jié)尾的子序和的最大值,中的最大值就是我們整個序列的最大子序和。
代碼實(shí)現(xiàn)
- 1
- 2
總結(jié)
- 上一篇: 189. 旋转数组
- 下一篇: 557. 反转字符串中的单词 III