代码随想录算法训练营第四十九天|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II

一、LeetCode121. 买卖股票的最佳时机

题目链接:121. 买卖股票的最佳时机
1、dp数组及其下标含义:dp[i]表示第i天所能收获的最大利润。
2、递推公式:用一个整数low来记录当天之前最低的股票价格,则dp[i] = max(dp[i - 1], prices[i] - low),low = min(low, prices[i])。
3、初始化,dp[0] = 0, low = prices[0]。
4、遍历顺序:从下标1开始从小到大遍历每天的股票价格。
5、打印dp数组检查。
代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<int>dp(prices.size(), 0);//记录第i天获得的最大利润
        int low = prices[0];//记录当天和之前的最低股票价格
        dp[0] = 0;
        for(int i = 1; i < prices.size(); i++) {
            dp[i] = max(dp[i - 1], prices[i] - low);
            low = min(prices[i], low);
        }
        return dp[prices.size() - 1];

    }
};

二、LeetCode122. 买卖股票的最佳时机 II

题目链接:122. 买卖股票的最佳时机 II
这道题很简单,如果后一天的股票加格大于前一天的价格,那么就可以获得利润。
所以只需遍历所有的股票价格,比较相邻两只股票,如果有利润则加在总利润里就可以了。
代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int sum = 0;//利润总和
        for(int i = 0; i < prices.size() - 1; i++) {
            if(prices[i] < prices[i + 1]) sum += (prices[i + 1] - prices[i]);//如果后一天价格高于前一天就有利润。
        }
        return sum;

    }
};

你可能感兴趣的:(C++算法题解,算法,leetcode,职场和发展)