正常做法
超时,复杂度 O ( n 2 ) O(n^2) O(n2)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int max_p = 0, curr_buy=0;
auto maxPosition = max_element(prices.begin(), prices.end());
if(prices.size()<1)
return max_p;
for(int i=0; i<prices.size() - 1; i++){
if(prices[curr_buy]<prices[i])
continue;
maxPosition = max_element(prices.begin() + i, prices.end());
int profit = *maxPosition - prices[i];
if(profit > max_p)
max_p = profit;
curr_buy = i;
}
return max_p;
}
};
求取一阶差分
复杂度 O ( n ) O(n) O(n)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int sum = 0, max_sum=0;
if(prices.size()<1)
return max_sum;
for(int i=0; i<prices.size() - 1; i++){
sum += prices[i+1] - prices[i];
if(sum>max_sum)
max_sum = sum;
if(sum<0)
sum=0;
}
return max_sum;
}
};