【LeetCode】 53.最大子数组和(动态规划)
前言
该题在力扣是中等题型,比较典型,主要是记录思路和代码书写方式
一、动态规划是什么?
动态规划的思想就是将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解
,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。能用动态规划的方法求解的问题有两个特质:最优子结构性质和子问题重叠性质
二、题目要求及样例
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
提示:子数组是连续的
1.自己的思路:
①遍历数组找出nums中最大的元素和它的下标;如果最大的元素小于等于0,得解,否则下一步
②以这个最大的元素为起点,计算这个与前后元素的和,每次计算完的值与上次计算的值作比较,如果小于上次计算的值,说明有负数
③陷入沉思……
2.正确的思路(动态规划法):
①定义子问题,或者叫定义状态,把不确定的因素确定下来,进而把子问题定义清楚
本题中不确定最大的连续子数组一定会选哪个数,那么我们可以求出所有经过输入数组的某一个数的连续子数组的最大和,不妨把经过输入数组的每一个元素当