前言

最大字序和的思想用到了动态规划思想,本文章通过最大字序和例子来简单解释动态规划思想。

动态规划指的是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决,就是将待求解的问题分解成未知个小问题,然后按照顺序求解小问题,前面解决的问题为后面一个问题的求解提供了有用的信息。

动态规划的大致思路;

首先拆分问题,根据问题的可能性把问题划分成一步一步这样就可以通过递推或者递归来实现。

前面拆分的步骤之间的关系,用一种看得见的形式表现出来,就像高中学的推导公式。

输出最优解

问题描述

给出一个整数数组 nums ,找到一个具有最大和的连续子数组返回其最大和。比如说[-2,1,-3,4,-1,2,1,-5,4],找出的最大字序和为6,分别由数组中的[4,-1,2,1]中的数相加

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

输出:6

解决方案

对于数组求最大字序和的问题,我们先再给一个数组a来记录相加或者不变的状态,a[i]就为以nums[i]结尾的连续子数组最大和。首先我们先把数组a初始化为n个为o的列表,a = [0] * n,依次计算nums的长度,如果nums长度为1,则就把nums中的第一个元素与a列表中的第一个元素相加,结果就为[-2, 0, 0, 0, 0, 0, 0, 0, 0],再遍历1到n的数记为i,此时我们加入a[i-1]来与nums[i]形成