力扣日记121

这篇具有很好参考价值的文章主要介绍了力扣日记121。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 题目

LeetCode 121 买卖股票的最佳时机

1.1 题意

给定每天股价,选择一天买入一天卖出,时间上满足先后顺序,求最大利润

1.2 分析

时间复杂度在O(n)

1 <= prices.length <= 10e5

简单想到对于某个位置找前面出现的最小值和后面出现的最大值,然后做差。
对于每个位置每次查找时间复杂度上O(n^2),可以先查找,用数组记录下,然后

1.3 我的解法

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // get size
        int n = prices.size();
        // store pre min and suffex max
        // 细节开大两个位置,避免越界检查
        vector<int> preMin(n+2, INT_MAX);
        vector<int> sufMax(n+2, INT_MIN);
        for(int i=1; i<=n; i++){
            preMin[i] = min(preMin[i-1], prices[i-1]);
            // sufMax 实际是逆序,分两个循环写可以更好满足时空局部性,性能会更好
            // 这里偷懒写一块了就
            sufMax[n+1-i] = max(sufMax[n+2-i], prices[n-i]);
        }
        // fins ans
        int ans = 0;
        for(int i=1;i<n;i++){
            // 这里小细节注意数组具体含义
            ans = max(ans, sufMax[i] - preMin[i]);
        }
        return ans;
    }
};

1.4 学习题解反思

我的解法时间复杂度O(n), 空间复杂度O(n)

题解中一次遍历完成,又是学到了的一天

有点类型经典的打导弹那题
一次遍历,每次记录下当前的最小股价和当前最大利润,
如果遇到最小股价即可更新,为什么可以更新?因为再往后遍历的高股价,是满足买这之前的所有的股价,所以选择更新最低的股价就行

1.5 bug日记

注意下标

2. 后记

仅分享自己的想法,有意见和指点非常感谢文章来源地址https://www.toymoban.com/news/detail-491035.html

到了这里,关于力扣日记121的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode121. 买卖股票的最佳时机

    题目: 给定一个数组  prices  ,它的第  i  个元素  prices[i]  表示一支给定股票第  i  天的价格。 你只能选择  某一天  买入这只股票,并选择在  未来的某一个不同的日子  卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大

    2024年02月10日
    浏览(50)
  • [思维]LeetCode:121.买卖股票的最佳时机

      题目链接:121. 买卖股票的最佳时机 - 力扣(Leetcode)   分析:这里的数据大小为1e5,所以使用暴力会TLE. 思路:我们发现, 需要找到最大利润,其目标就是找到当前第i位后的最大值。换位思考,就是找到当前第i位前的最小值。

    2023年04月09日
    浏览(59)
  • LeetCode:121.买卖股票的最佳时机——动态规划

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 关于动态规划:LeetCode:322. 零钱兑换——动态规划从案例入门 题目描述 :给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只

    2023年04月17日
    浏览(38)
  • leetcode 121. 买卖股票的最佳时机 (贪心 + 动规

    贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 动规的思路: 现在觉得做动规的关键点就是找出,当前的状态是否与之前的状态有关,也就是说:当前一般会有两种状态,具体哪一种为最优,需要依靠之前的状态及逆行推导。 比如说本题

    2024年02月02日
    浏览(43)
  • LeetCode-题目整理【3】:买卖股票的最佳时机

    买卖股票的最佳时机 都是求最大利润,但是在没有限制,如121和122,动态规划稍微复杂一些,建议不用,到最后两道难题,题目有限制,使用动态规划通过求解子问题的最优解来逐步求解原问题的最优解。 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i]

    2024年01月23日
    浏览(61)
  • 121.买卖股票的最佳时机 122.买卖股票的最佳时机II

    力扣题目链接(opens new window) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最

    2024年01月17日
    浏览(40)
  • 算法刷题|121.买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ

    题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获

    2023年04月26日
    浏览(41)
  • 121. 买卖股票的最佳时机

    121. 买卖股票的最佳时机 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/

    2024年02月19日
    浏览(46)
  • 算法训练第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

    题目链接:121.买卖股票的最佳时机 参考:https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html 视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77q 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一

    2024年02月01日
    浏览(38)
  • 力扣 -- 309. 最佳买卖股票时机含冷冻期

     题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。   参考代码:  以上就是用动态规划的思想分析这道题目的整个过程啦,你学会了吗?如果以上题解对你有

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包