面试150 最大子数组和
思路
贪心法:设定最小标志result为float(‘-inf’),遍历一次数组元素进行求和,如果当前元素大于result,则更新result的值,如果sum小于0,则重新置0进行计算,最后返回result
class Solution:def maxSubArray(self, nums: List[int]) -> int:n=len(nums)result=float('-inf')sum=0for i in range(n):sum+=nums[i]if sum>result:result=sum if sum<0:sum=0return result
动态规划法:首先定义动态规划数组dp=[float(‘-inf’)]*n,dp[i]表示以第i个元素结尾的最大连续子数组和,初始状态dp[0]为nums[0],递推的公式为当前最大的和要么是前一个元素+nums[i],要么是从当前元素nums[i]
重新开始,选择最大值进行更新,最后返回。
class Solution:def maxSubArray(self, nums: List[int]) -> int:if not nums:return 0n=len(nums)dp=[float('-inf')]*n dp[0]=nums[0]for i in range(1,n):dp[i]=max(dp[i-1]+nums[i],nums[i])return max(dp)