解法一 DP
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
vector<int> dp(prices.size(), 0);
for(int i=1;i<prices.size();i++){
dp[i] = max(0, dp[i-1]+prices[i]-prices[i-1]);
res = max(res, dp[i]);
}
return res;
}
};
解法二 Greedy
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0, pre=0;
for(int i=1;i<prices.size();i++){
pre = max(0, pre+prices[i]-prices[i-1]);
res = max(res, pre);
}
return res;
}
};
Further more
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0, buy=INT_MAX;
for(int p:prices){
buy = min(p, buy);
res = max(res, p-buy);
}
return res;
}
};