lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

1. 题目

 

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/

121. 买卖股票的最佳时机

 

2. 解法

2.1 解法一:动态规划 

 

2.2 解法二:非动态规划 

思路

这道题的目标是给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格,找出只进行一次交易(即买入和卖出一支股票)所能获得的最大利润。动态规划的思路是维护一个最小买入价格和一个最大利润,遍历数组,更新这两个变量,最后返回最大利润

代码的逻辑

代码的逻辑是这样的:

  • 首先,判断数组的长度是否小于等于1,如果是,就直接返回0,因为没有交易的可能。
  • 然后,初始化一个变量min,表示最小买入价格,初始值为数组的第一个元素。初始化一个变量ans,表示最大利润,初始值为0。
  • 接着,从数组的第二个元素开始遍历,对于每个元素prices[i],做两件事:
    • 用prices[i]减去min,得到当前卖出价格和最小买入价格的差值,即当前利润。如果这个利润大于ans,就更新ans为这个利润。
    • 用min和prices[i]比较,如果prices[i]小于min,就更新min为prices[i],表示找到了更低的买入价格。
  • 最后,遍历结束后,返回ans作为答案。

这样,我们就可以在一次遍历中找到最大利润。

 

具体实现

    public int maxProfit(int[] prices) {
        int length = prices.length;
        int min = prices[0];
        int max = 0;
        for (int i = 1; i < length; i++) {
            if (prices[i] > min) {
                max = Math.max(max, prices[i] - min);
            } else {
                min = prices[i];
            }
        }
        return max;
    }

  

 

3. 总结

posted on 2023-04-17 16:39  白露~  阅读(8)  评论(0编辑  收藏  举报