(一)题目描述
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
(二)解题思路
(1)状态dp[i]含义:前i日最大利润;
(2)初始值:dp[0]为第一天利润,当然为0;
(3)状态转移方程:dp[i]=Math.max(dp[i-1],prices[i]-cost)(cosi为前i日的价格最小值):前 i - 1日最大利润 dp[i-1]dp[i−1] 和第 i 日卖出的最大利润中的最大值。
(三)代码如下
class Solution {
public int maxProfit(int[] prices) {
int len=prices.length;
int[] dp=new int[len];
dp[0]=0;
//利用一个cost记录从0到当前位置的最小值
int cost=1000000;
for (int i = 1; i <len ; i++) {
cost=Math.min(cost,prices[i]);
dp[i]=Math.max(dp[i-1],prices[i]-cost);
}
return dp[len-1];
}
}
(递归方程没想到,呜呜呜~~)