Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach(分治算法), which is more subtle.
思路<一>
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
bigest = nums[0]
if max(nums)<0: #如果所有元素全小于0,直接返回最大值就可以
return max(nums)
for i in nums:
sum += i
if sum<0: #如果计算到某一时刻,元素和小于0,可以全部抛弃,从下一个值开始计算
sum = 0
if sum>bigest: #保存运算过程中最大值
bigest = sum
return bigest
思路<二>看到discussion里的很简洁的一种方法,学习了。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1, len(nums)):
if nums[i-1] > 0:
nums[i] += nums[i-1]
return max(nums)
本文介绍了一种寻找连续子数组中最大和的有效方法,并通过两种不同的实现方式进行了演示。第一种方法采用一次遍历的方式,当累加和小于0时重新开始计算;第二种方法则通过迭代更新数组自身来简化计算过程。
926

被折叠的 条评论
为什么被折叠?



