leetcode 121. 买卖股票的最佳时机

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

2023.8.20

leetcode 121. 买卖股票的最佳时机,leetcode专栏,leetcode,算法,职场和发展,数据结构,cpp

         本题用dp算法做,dp[i]的含义:前 i+1天能获得的最大利润。 然后每次循环时需要维护一个最小值min_num :即 i+1天中股票的最低价。剩下的步骤都很常规,代码如下:

一维dp:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 0) return 0;
        vector<int> dp(prices.size());
        int min_num = prices[0];
        dp[0] = 0;
        for(int i=1; i<prices.size(); i++)
        {
            dp[i] = max(dp[i-1] , prices[i]-min_num);
            min_num = min(min_num , prices[i]);
        }
        return dp[prices.size()-1];
    }
};

二维dp:

        dp[i][0]:第i天持有股票所拥有的最多现金。 

        dp[i][1]:第i天不持有股票所拥有的最多现金。

        持有股票:可能之前就持有了股票,也可能是今天刚买的。 即:dp[i][0] = max(dp[i-1][0] , -prices[i]);

        不持有股票:可能之前就没持有, 也可能是今天刚卖出。即:dp[i][1] = max(dp[i-1][1] , dp[i-1][0]+prices[i]);

        代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(),vector<int>(2));
        dp[0][0] = -prices[0];
        dp[0][1] = 0;
        for(int i=1; i<prices.size(); i++)
        {
            dp[i][0] = max(dp[i-1][0] , -prices[i]);
            dp[i][1] = max(dp[i-1][1] , dp[i-1][0]+prices[i]);
        }
        return dp[prices.size()-1][1];
    }
};

2023.10.22

        二刷。动态规划, 一维和二维dp数组的java代码如下:

一维dp:

class Solution {
    public int maxProfit(int[] prices) {
        int[] dp = new int[prices.length];
        dp[0] = 0;
        int min_price = prices[0];
        for(int i=1; i<prices.length; i++){
            dp[i] = Math.max(dp[i-1] , prices[i]-min_price);
            min_price = Math.min(min_price , prices[i]);
        }
        return dp[prices.length-1];
    }
}

二维dp:

class Solution {
    public int maxProfit(int[] prices) {
        int[][] dp = new int[prices.length][2];
        dp[0][0] = -prices[0];
        dp[0][1] = 0;
        for(int i=1; i<prices.length; i++){
            //持股
            dp[i][0] = Math.max(dp[i-1][0] , -prices[i]);
            //不持股
            dp[i][1] = Math.max(dp[i-1][1] , dp[i-1][0]+prices[i]);
        }
        return dp[prices.length-1][1];
    }
}

         ps:在持股的情况下,如果是刚买进股票,此时现金是 -prices[i] ,为什么?因为本题股票只会买入一次(后面的股票问题会有买入多次的情况),所以当前的初始现金肯定是0,即0-price[i] = -price[i]文章来源地址https://www.toymoban.com/news/detail-660237.html

到了这里,关于leetcode 121. 买卖股票的最佳时机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 算法刷题|121.买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ

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

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

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

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

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

    2024年02月02日
    浏览(43)
  • 算法训练第四十九天 | 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日
    浏览(39)
  • 121.买卖股票的最佳时机 122.买卖股票的最佳时机II

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

    2024年01月17日
    浏览(40)
  • 121. 买卖股票的最佳时机

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

    2024年02月19日
    浏览(47)
  • 力扣 121. 买卖股票的最佳时机

    题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 好久没写代码了,啥啥都忘了 C++题解1:贪心算法。(来源代码随想录) 因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。 时间复杂度:O(n) 空

    2024年02月20日
    浏览(34)
  • 买卖股票的最佳时机【力扣121】

    假如我们要在第 i 天卖出股票,那么为了获得最大利润,买股票的最佳时间是第 i 天前的最低股价的那一天。 我们使用min来记录已经访问过的 0-i 天的最低股价。那么在第 i 天,如果股价大于min,那么最大利润为price[i]-min;否则最大利润为0,并且min=price[i]。

    2024年02月11日
    浏览(42)
  • 《LeetCode》—— 买卖股票的最佳时机

    本期,我将给大家讲解的是有关动态规划类的题—— 买卖股票的最佳时机 。这个系列总共有四道题。接下来,让我们一起去看看!!! 目录 (一)买卖股票的最佳时机 (二)买卖股票的最佳时机 II (三)买卖股票的最佳时机 III (四)买卖股票的最佳时机 IV LeetCode题目链

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

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

    2024年01月23日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包