作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
会一些的技术:数据分析、算法、SQL、大数据相关、python
欢迎加入社区:码上找工作
作者专栏每日更新:
LeetCode解锁1000题: 打怪升级之旅
python数据分析可视化:企业实战案例
题目描述
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入格式
- nums:一个整数数组。
输出格式
- 返回整数,表示最大子数组的和。
示例
示例 1
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
示例 2
输入: nums = [1]
输出: 1
方法一:动态规划
解题步骤
- 定义状态:
dp[i]
表示以nums[i]
结尾的最大子数组和。 - 状态转移:
dp[i] = max(nums[i], dp[i-1] + nums[i])
,意味着当前元素单独成数组或加入前面的数组。 - 初始化:
dp[0] = nums[0]
,只有一个元素时最大和即为该元素。 - 遍历数组:根据状态转移方程更新
dp
数组。 - 得到结果:返回
dp
数组中的最大值,即为所求。
完整的规范代码
def maxSubArray(nums):"""动态规划解法求最大子数组和:param nums: List[int], 输入的整数数组:return: int, 最大子数组的和"""if not nums:return 0n = len(nums)dp = nums[0]max_sum = dpfor i in range(1, n):dp = max(nums[i], dp + nums[i])if dp > max_sum:max_sum = dpreturn max_sum# 示例调用
print(maxSubArray([-2,1,-3,4,-1,2,1,-5