题目来源:https://leetcode.com/problems/maximum-subarray/description/
题目: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.
题意分析:
在给定数组中找到连续的子数组(包含至少一个数字),它的和是所有子数组中最大的。
例如,给定的数组[−2, 1, −3, 4, −1, 2, 1, −5, 4],
其中子数组[4, −1, 2, 1] 有最大的和6。
例如,给定的数组[−2, 1, −3, 4, −1, 2, 1, −5, 4],
其中子数组[4, −1, 2, 1] 有最大的和6。
思路分析:
首先假定数组中第一个数的值为所求最大和(max_sum),同时将当前和(now_sum)设为0。
然后开始遍历整个数组,将当前和加上当前数组中的值,若当前和大于最大和,则将最大和置为当前和。
若当前和小于0,则重新开始计算当前和,此时需要先将当前和置为0。
最后返回最大和。
代码:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
max_sum = nums[0]
now_sum = 0
for num in nums:
now_sum += num
if now_sum > max_sum:
max_sum = now_sum
if now_sum < 0:
now_sum = 0
return max_sum
本文介绍了一种解决LeetCode上最大子数组和问题的方法,该问题要求在给定数组中找出连续子数组的最大和。文章提供了一段Python代码实现,并采用动态规划思想,确保时间复杂度为O(n)。
348

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



