题解 | #买卖股票的最好时机(二)#

买卖股票的最好时机(二)

https://www.nowcoder.com/practice/9e5e3c2603064829b0a0bbfca10594e9

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算最大收益
     * @param prices int整型一维数组 股票每一天的价格
     * @return int整型
     */
    /**
       思路:
       与1相同:创建二维dp[i][0] 和 dp[i][1] 分别表示当天1是否持有股票

       与1不同的是 1只能买入卖出一次 因此求的是买入时的最低值  然后卖出时的最高值

       而本题是可以多次买入卖出,因此 dp[i][1] 不再是 求出历史最低价
                               而是判断 当前已买入的股票是否合适卖出
                       即比较 dp[i-1][1] ,dp[i-1][0]-prices[i] 哪个更大
               dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i])

     */
    public int maxProfit (int[] prices) {
        // write code here
        int n = prices.length;
        //dp[i][0]表示某一天不持股到该天为止的最大收益,dp[i][1]表示某天持股,到该天为止的最大收益
        int[][] dp = new int[n][2];
        //第一天不持股,总收益为0
        dp[0][0] = 0;
        //第一天持股,总收益为减去该天的股价
        dp[0][1] = -prices[0];
        //遍历后续每天,状态转移
        for (int i = 1; i < n; i++) {
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
        }
        //最后一天不持股,到该天为止的最大收益
        return dp[n - 1][0];

    }
}

全部评论

相关推荐

赛博小保安:你这简历没啥大问题的,经历技能也足够了,问题应该就是出在出身了,学院本就是这样,HR忙着跟92的勾搭呢,哪有心思看我们这些双非😿😭
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务