一,最大连续子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
参考:https://www.cnblogs.com/coderJiebao/p/Algorithmofnotes27.html
大白话解释:最后得到的一个连续子序列肯定是以某个元素结尾的一段连续序列~
所以根据状态转移方程遍历输出数组A,挨个求出以输出数组A的元素为结尾的最大子序列,从而得到一个与输入数组等长的一个新的数组B。遍历B并取最大值,即为输入数组A的最大连续子序和。
二, 买卖股票的最佳时机(只能买卖一次)
给定一个数组,它的第 i 个元素是一支给定股票第 i
天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。
示例 1:输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =
6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
大白话解释:
(1)法一动态规划
参考:https://blog.csdn.net/chenvast/article/details/78950392中的解题思路一
本质:(股票第一天买,第三天卖的利润)=(股票第一天买,第二天卖的利润)+(股票第二天买,第三天卖的利润)
所以~首先求出每两天的利润差,然后买卖股票的最佳时机问题就转化成了求最大连续子序和的问题了!
(2)法二贪心算法
参考:https://zhuanlan.zhihu.com/p/53262788中的方法二
嗯,这个方法也不错,简单易懂~