1. 动态规划简单理解

动态规划是一种常见的算法思想,用于解决具有重叠子问题和最优子结构特征的问题。动态规划算法通常涉及到将问题分解成一系列子问题,并且通过求解子问题的最优解来计算原问题的最优解。

具体地,动态规划算法通常包括以下步骤:

1. 定义状态:将原问题划分为若干个子问题,并定义状态表示原问题和子问题的解。

2. 初始状态:确定初始问题的解,通常为最简单的子问题的解。

3. 状态转移方程:通过求解子问题的最优解来推导出原问题的最优解,并且使用状态转移方程来描述子问题之间的关系。

4. 计算最优解:根据状态转移方程和初始状态,计算出原问题的最优解。

例如,背包问题是一个经典的动态规划问题。背包问题的目标是在给定的一定容量和一组物品的情况下,选择物品使得能够装入背包的物品总价值最大。这个问题可以分解为若干个子问题,每一个子问题表示对一部分物品的选择。使用动态规划算法,可以依次求解每个子问题的最优解,并且通过状态转移方程推导出原问题的最优解。

总之,动态规划算法通过将原问题分解成若干个子问题,并且通过求解子问题的最优解来计算原问题的最优解。这种算法思想在许多领域都有广泛的应用,比如计算机科学、数学、经济学等等。

leetcode 53 最大子序列和(Maximum Value Contiguous Subsequence

题目描述:

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

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],

输出: 6

解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

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

解题思路:

这题太简单了,只是简要列出思路。

1、定义两个变量

tempSum:存储之前的累加和

maxSum: 存储当前的最大和。

2、遍历数组,当第i个数时,主要更新两个变量就可以:

判断前面累加和是否为负值,如果为负值,则累加和更新为当前值;否则,继续累加当前值

判断累加和是否大于最大和,如果大于最大和,则更新为累加和;否则,继续保留之前的最大和。

本题代码实际操作验证参考leetcode53


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容