方法:贪心
class Solution {
public:
int maxProfit(vector<int>& prices) {
int low = INT_MAX, res = 0;
for (int i = 0; i < prices.size(); ++i) {
low = min(low, prices[i]);
res = max(res, prices[i]-low);
}
return res;
}
};
$时间复杂度O(n),空间复杂度O(1);
方法:dp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<vector<int>> f(2, vector<int>(2));
f[0][0] -= prices[0];
f[0][1] = 0;
for (int i = 1; i < n; ++i) {
f[i&1][0] = max(f[(i-1)&1][0], -prices[i]);
f[i&1][1] = max(f[(i-1)&1][1], f[(i-1)&1][0]+prices[i]);
}
return f[(n-1)&1][1];
}
};
$时间复杂度O(n),空间复杂度O(1);
方法:贪心
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0;
for (int i = 1; i < prices.size(); ++i) {
int cur = prices[i] - prices[i-1];
if (cur > 0) res += cur;
}
return res;
}
};
$时间复杂度O(n),空间复杂度O(1);
方法:dp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<vector<int>> dp(n, vector<int>(2));
dp[0][0] -= 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[n-1][1], dp[n-1][0]);
}
};
$时间复杂度O(n),空间复杂度O(n);