力扣练习之买卖股票的最佳时机 II

我爱海鲸 2022-07-18 23:04:53 初级算法

简介初级算法

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2zsx1/

解法一:

  static int  maxProfit(int[] prices) {
        int len = prices.length; // 数组长度
        int[] buy = new int[len]; // 记录买入时的最小值
        int[] sell = new int[len]; // 记录卖出时的最大值
        buy[0] = -prices[0]; 
        for (int i = 1; i < len; i++) { 
            buy[i] = Math.max(buy[i - 1], sell[i - 1] - prices[i]);
            sell[i] = Math.max(sell[i - 1], buy[i - 1] + prices[i]);
        }
        return sell[len - 1]; // 返回第二天的卖出价格
    }



buy[0] = -prices[0];
初始化买入时的最小值 为 -prices[0] 即 -prices[0] 可以代表没有股票 也可以代表有股票 但是没有购买股票 
所以买入时的最小值为 -prices[0] 即 -prices[0] 可以代表没有股票 也可以代表有股票 但是没有购买股票
for (int i = 1; i < len; i++) {
从第二天开始遍历 因为第一天没有买入股票 
所以从第二天开始遍历 买入时的最小值为 -prices[i] 即 -prices[i]
可以代表没有股票 也可以代表有股票 但是没有购买股票
buy[i] = Math.max(buy[i - 1], sell[i - 1] - prices[i]);
当前买入时的最小值为 上一天的最小值 
即 buy[i - 1] 即 buy[i - 1] 可以代表没有股票 也可以代表有股票
但是没有购买股票 和 上一天的最大值
即 sell[i - 1] - prices[i] 即 sell[i - 1] - prices[i]
可以代表没有股票 也可以代表有股票 但是没有购买股票
sell[i] = Math.max(sell[i - 1], buy[i - 1] + prices[i]);
当前卖出时的最大值为 上一天的最大值 
即 sell[i - 1] 即 sell[i - 1] 可以代表没有股票 也可以代表有股票
但是没有购买股票 和 上一天的最小值
即 buy[i - 1] + prices[i] 即 buy[i - 1] + prices[i] 可以代表没有股票 也可以代表有股票 但是没有购买股票


你好:我的2025