求数组左边减去右边最大值 / 右边减去左边最大值 是笔试和面试中很容易考的一个动态规划问题,我的一个同学面试的时候就考了 求数组左边减去右边最大值 一题 。
先考虑一下 右边减去左边最大值 ,为什么呢 ? 因为这是 力扣 上一到很经典的 动态规划序列题 ,可能换个名字大家就能想起来了, 力扣: 121. 买卖股票的最佳时机
题目描述:
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
输入:[ 7 , 1 , 5 , 3 , 6 , 4 ]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6 - 1 = 5 。
注意利润不能是 7 - 1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
题目分析:
解释中说的很清楚 ,要想获得最大利润 , 不就是数组左边以最小值买入 , 在右边以最大值出售 , 直白的说就是 数组右边减去左边的最大值
具体的动态规划思路请参考博客 力扣:最佳买卖股票时机
public int maxProfit(int[