首页 > 其他分享 >买卖股票的最佳时机

买卖股票的最佳时机

时间:2023-01-11 16:47:35浏览次数:40  
标签:买卖 int 股票 len 最佳时机 所得 prices dp

image

导读 ^ _ ^

开更买股票的系列问题咯!
这次股票的限制是买卖只能一次,求最大化利益。

题目

leetcode 121
image.png

代码与思路

贪心思路

因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。

//贪心思路


class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int low = INT_MAX;
        int result = 0;
        for (int i = 0; i < prices.size(); i++) {
            low = min(low, prices[i]);  // 取最左最小价格
            result = max(result, prices[i] - low); // 直接取最大区间利润
        }
        return result;
    }
};

动态规划思路

dp[i][0] 表示第i天持有股票所得最多现金

  • 第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
  • 第i天买入股票,所得现金就是买入今天的股票后所得现金即:-prices[i]
  • dp[i][0] = max(dp[i - 1][0], -prices[i]);

dp[i][1] 表示第i天不持有股票所得最多现金

  • 第i-1天就不持有股票,那么就保持现状,所得现金就是昨天不持有股票的所得现金 即:dp[i - 1][1]
  • 第i天卖出股票,所得现金就是按照今天股票佳价格卖出后所得现金即:prices[i] + dp[i - 1][0]
  • dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);

初始化 :dp[0][0] -= prices[0]; dp[0][1] = 0;
遍历顺序:从前往后

//动态规划思路
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if (len == 0) return 0;
        vector<vector<int>> dp(len, vector<int>(2));//len个这样的元素,每个元素为两个格子
        dp[0][0] -= prices[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i++) {
            dp[i][0] = max(dp[i - 1][0], -prices[i]);
            dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);
        }
        return dp[len - 1][1];
    }
};

#谢谢你的观看!

^ _ ^

标签:买卖,int,股票,len,最佳时机,所得,prices,dp
From: https://www.cnblogs.com/HX-Note/p/17044190.html

相关文章

  • 【动态规划】股票买卖问题
    目录股票买卖问题简介应用应用1:Leetcode.121题目分析边界条件状态转移代码实现应用2:Leetcode.122题目分析边界条件状态转移代码实现应用3:Leetcode.123题目分析边界条件状态......
  • 122. 买卖股票的最佳时机II
    问题链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/解题思路买卖股票,本质上就是低价买入,高价卖出。我们可以用模拟法,不断的去找到......
  • R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=23934最近我们被客户要求撰写关于ARIMA-GARCH的研究报告,包括一些图形和统计输出。在本文中,我们将尝试为苹果公司的日收益率寻找一个合适的......
  • 股票和公司盈利的三种方式类比
    最近看了刘润的《底层逻辑2》讲到了公司盈利的三种方式:能力,速度、倍数;这三种方式和股票竟然有异曲同工之妙;原来世间万物的之间的原理都是通的。​能力,公司盈利的第一种方......
  • 道长的算法笔记:状态机模型之股票系列问题
    (一)股票系列问题所谓的股票问题,是一个动态规划状态机模型的系列问题,这些题目来自于LeetCode社区,这些问题非常经典,能够帮助我们理解动态规划的本质,这些问题大多初看之......
  • Python爬取往期股票数据,分析中奖规律!
    快过年了,手头有点紧,但是作为一个男人,身上怎么能够没有大把钞票呢?于是我决定用Python来分析一波股票,赢了会所嫩*,输了下海干活!好了,上面是我吹牛逼的,不过确实有小伙......
  • 动态规划 - 股票
    动态规划的本质是从子状态推出当前状态,且无后效性;需要我们合理地定义状态。对于股票的最大利润,决定性的状态因素有三个:第i天结束时,最多能进行k次交易,当前是否持有股......
  • 【LeetCode】122. 买卖股票的最佳时机Ⅱ
    官方介绍文档LeetCode说明连接:122.买卖股票的最佳时机II-力扣(LeetCode)贪心算法参考解题思路:买卖股票的最佳时机II(贪心,清晰图解)-买卖股票的最佳时机II-力扣(Le......
  • 学习记录--利用LSTM实现预测时间序列(股票预测)
    nn.Linear的理解nn.Linear是pytorch中线性变换的一个库在实际应用中,nn.Linear往往用来初始化矩阵,供神经网络使用。view()方法我们经常会用到x.view()方法来进行数据......
  • 【LeetCode】121. 买卖股票的最佳时机
    暴力破解法递归算法动态规划classSolution{public: intmaxProfit(vector<int>&prices){ size_tnPriceSize=prices.size(); intnMaxProfit=0; if(nP......