给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。
返回你能获得的最大利润。
示例
输入:prices=[7,1,5,3,6,4]输出:7解释:在第2天的时候买入,在第3天的时候卖出,这笔交易所能获得利润=5-1=随后,在第4天的时候买入,在第5天的时候卖出,这笔交易所能获得利润=6-3=总利润为4+3=示例
输入:prices=[1,2,3,4,5]输出:4解释:在第1天的时候买入,在第5天的时候卖出,这笔交易所能获得利润=5-1=总利润为示例
输入:prices=[7,6,4,3,1]输出:0解释:在这种情况下,交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为0。
提示:
1<=prices.length<=3*1040<=prices[i]<=104
解题思路
采用动态规划的方法
有两个状态,一个是持有1股票,另一个是不持有股票持有1股票有两种情况,一种是前一天本来就持有1股票,另一种是前一天不持有股票,当天买了一张股票,所以要减去prices[i]不持股票有两种情况,一种是前一天本来就不持股票,另一种是前一天持有股票,当天卖了一张股票,所以要加上prices[i]最终是手不持股票的情况,收益最大
public int maxProfit(int[] prices) {
int dp[][]=new int[2][prices.length];
dp[0][0]=0;
dp[1][0]=0-prices[0];
for(int i=1;i
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点