写点什么

[Day7]-[动态规划] 最大子数组和

作者:方勇(gopher)
  • 2022 年 4 月 06 日
  • 本文字数:532 字

    阅读完需:约 2 分钟

[Day7]-[动态规划] 最大子数组和

53. 最大子数组和

难度简单 4694 收藏分享切换为英文接收动态反馈

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

 

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
复制代码

示例 2:

输入:nums = [1]输出:1
复制代码

示例 3:

输入:nums = [5,4,-1,7,8]输出:23
复制代码

 

提示:

  • 1 <= nums.length <= 105

  • -104 <= nums[i] <= 104

 

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

题解:

func maxSubArray(nums []int) int {	var solution func(nums []int) int	var max func(x, y int) int	max = func(x, y int) int {		if x > y {			return x		}		return y	}	solution = func(nums []int) int {		var prev, current, res int       // 上一状态,当前状态,最大值		prev, res = nums[0], nums[0]     // 初始状态为数组第一个元素		for i := 1; i < len(nums); i++ { // 状态转移方程,res = max(上一个状态+当前值,当前值)			current = max(nums[i], prev+nums[i])			prev = current			res = max(res, current)		}		return res	}    return solution(nums)}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day7]-[动态规划] 最大子数组和_LeetCode_方勇(gopher)_InfoQ写作平台