leetcode 122 买卖股票的最佳时机

简介: leetcode 122 买卖股票的最佳时机

买卖股票的最佳时机


05ddef76d7e0474ca57ce8bccfe34c2d.png

贪心算法

核心思想是找到利润。然后利润大于0的相加

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<int> profit; 
        int result = 0;
        for(int i=1 ;i < prices.size(); i++)
        {
            if(prices[i] - prices[i-1] > 0 ) //单日利润大于0的存入
                profit.push_back(prices[i] - prices[i-1]);
        }
        for(int i=0 ; i < profit.size(); i++) //计算利润和
            result += profit[i]; 
        return result;
    }
};

动态规划

dp数组的含义:

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

如果第i天持有股票即dp[i][0]

  • 第i-1天就持有股票,那么就保持现状,即:dp[i - 1][0]
  • 第i天买入股票,就是昨天不持有股票的所得现金减去今天的股票价格
    即:dp[i - 1][1] - prices[i]

如果第i天不持有股票即dp[i][1]的情况

  • 第i-1天就不持有股票,那么就保持现状,即:dp[i - 1][1]
  • 第i天卖出股票,所得现金就是按照今天股票佳价格卖出后所得现金
    即:prices[i] + dp[i - 1][0]
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size()<=1) return 0;
        vector<vector<int>> dp(prices.size() , vector<int>( 2,0 ) );
        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] , dp[i-1][1] - prices[i] );
            dp[i][1] = max( dp[i-1][1] , dp[i-1][0] + prices[i] );
        }
        return  dp[prices.size()-1][1];
    }
};

二刷

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size()==0) return 0;
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for(int i=1 ; i<prices.size() ;i++)
        {
            dp[i][0] = max(dp[i-1][0] , dp[i-1][1]+prices[i]);
            dp[i][1] = max(dp[i-1][1] , dp[i-1][0]-prices[i]);
        }
        return max(dp[prices.size()-1][0],dp[prices.size()-1][1]);
    }
};
相关文章
|
6天前
|
算法 索引
leetcode代码记录(买卖股票的最佳时机
leetcode代码记录(买卖股票的最佳时机
13 1
|
6天前
|
算法
leetcode代码记录(买卖股票的最佳时机 IV
leetcode代码记录(买卖股票的最佳时机 IV
16 2
|
6天前
|
算法
leetcode代码记录(买卖股票的最佳时机 III
leetcode代码记录(买卖股票的最佳时机 III
13 5
|
6天前
leetcode代码记录(买卖股票的最佳时机 II
leetcode代码记录(买卖股票的最佳时机 II
11 1
|
6天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0
|
6天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
13 0
|
6天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
25 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
6天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
27 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
6天前
|
存储 算法 测试技术