119、股票问题Ⅱ-已经做过-LeetCode-122

题目

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

来源:力扣(LeetCode)

思路

贪心:计算差值,只要正数

动态规划:记录持有和不持有两种状态,最后不持有股票时利润最大!

代码:

贪心 + 动态规划

class Solution {
    public int maxProfit(int[] prices) {
        //一直下降就不卖
        if(prices == null || prices.length == 0 || prices.length == 1) return 0;
        //1.贪心
        int len = prices.length;
        int num = 0;
        int res = 0;
        for(int i = 1;i < len;i++){
            num = prices[i] - prices[i - 1];
            if(num >= 0) res += num;
        }
        return res;
        //2.动态规划:每天手里两种状态:持有股票;不持有股票
        int[] dp = new int[2];//用来记录两种状态;数值是此状态的最大利润数
        dp[0] = 0;//不持有股票
        dp[1] = -prices[0];//持有股票
        for(int i = 1;i < prices.length;i++){
            dp[0] = Math.max(dp[0],dp[1] + prices[i]);
            dp[1] = Math.max(dp[1],dp[0] - prices[i]);
        }
        return dp[0];//手里不持有股票是最大化利润
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值