算法刷题记录 Day42
Date: 2024.04.09
lc 122. 买卖股票的最佳时机II
c++
// dp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n == 1) return 0;
// dp[i]表示第i天的最大利润;
// dp[i] = dp[i-1] + max(prices[i]-prices[i-1], 0);
vector<int> dp(n, 0);
for(int i=1; i<n; i++){
dp[i] = dp[i-1] + max(prices[i]-prices[i-1], 0);
}
return dp[n-1];
}
};
// 贪心
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0;
// 只要比昨天涨了,昨天就买,今天就卖
for(int i=1; i<prices.size(); i++){
if(prices[i] > prices[i-1])
res += (prices[i] - prices[i-1]);
}
return res;
}
};
lc 121. 卖卖股票的最佳时机
c++
// 贪心
class Solution {
public:
int maxProfit(vector<int>& prices) {
// 取后项-前项中的最大值。1.暴力ON^2.
// 2.从左往右遍历。记录当前的最小值和当前值减去最小值的大小;
// 3. dp[i] 表示在前i天中完成买入和卖出的最大利润;
// dp[i] =
int n = prices.size();
int cur_min = INT_MAX;
int cur_res = 0;
for(int i=0; i<n; i++){
if(i > 0)
cur_res = max(cur_res, prices[i] - cur_min);
cur_min = min(prices[i], cur_min);
}
return cur_res;
}
};