lotus

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

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

 

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作为答案。

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

 

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
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   白露~  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示