题目:
- 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
例子:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
思路:
动态规划:
我们先假定一个最大值,再用一个随机变量不断的更新这个最大值
class Solution:
def FindGreatestSumOfSubArray(self, array):
maxnum = nums[0] # 先假定最大的值是第一个元素,
tmpnum = 0 # 定义随机变量的初始值为0
for i in array: # 循环
if tmpnum + i < i: # 如果随机变量 + 元素i < 元素i ,那么前面的元素都可以舍弃了,最大子序列只能在后面
tmpnum = i
else: # 否则,继续加上元素i
tmpnum += i
if maxnum < tmpnum: # 如果随机变量大于假定的最大值,则更新最大值
maxnum = tmpnum
return maxnum
if __name__ == '__main__':
solution = Solution()
nums = [-2,1,-3,4,-1,2,1,-5,4]
print(solution.FindGreatestSumOfSubArray(nums))
# 输出:
[6]
复杂度:
时间复杂度: O(n)
空间复杂度: O(1)