一、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;
}
};