力扣122-买卖股票的最佳实际Ⅱ

        虽然把这道题归为简单,但还是有点绕。解题思路和第1567道有点类似。

package likou;
/*
 * 买卖股票的最佳时机
 * 题干:
 * 	给定一个数组prices,其中prices[i]是一支给定股票第i天的价格
 * 	设计一个算法来计算你所能获取的最大利润
 * 	你可以尽可能地完成更多的交易(多次买卖一支股票)
 * 要求:必须在再次购买前出售掉之前的股票
 */
public class Demo122 {
    /*
     * 该题和力扣1567有点类似,但1567要更复杂一些
     * 解题思路:
     *   定义 0=<i<prices.length
     *   计算第i天的收益时需要根据第i天结束时,手上是否有股票两种情况来判断
     *      假设第i天结束时手上有股票,则可能存在两种场景,一种是第i-1天就有股票,一种是第i天才买的股票
     *      假设第i天结束时手上没有股票,则可能存在两种场景,一种是第i-1天就没有股票,一种是第i天卖出股票
     *     定义两个参数dp0,dp1分别表示第i天没有股票和有股票的场景,priceDifference为最大收益
     */
	public int maxProfit(int[] prices) {
       int dp0 = 0;
       int dp1 = -prices[0];
       int length = prices.length;
       for(int i=1;i<length;i++) {
    	   int temp_dpo = Math.max(prices[i]+dp1, dp0);//手上没有股票的收益
    	   int temp_dp1 = Math.max(dp0-prices[i], dp1);//手上有股票的收益
    	   dp0 = temp_dpo;
    	   dp1 = temp_dp1;
       }
       return dp0;
    }
	
	
	public static  void main(String args[]) {
		Demo122 demo = new Demo122();
		int[] prices = {7,1,5,3,6,4};
		System.out.println(demo.maxProfit(prices));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunny_daily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值