首先大家第一印象应该是暴力嘻嘻,不妨从后向前看,依次比较,维护一个最大值。但是时间复杂度为O(n^2)
class Solution
{
public:
int maxProfit(vector<int>& prices)
{
int length=prices.size();
int max=0;
for(int i=length-1;i>=1;i--)
{
for(int j=i-1;j>=0;j--)
{
if((prices[i]-prices[j])>max)
{
max=prices[i]-prices[j];
}
}
}
return max;
}
};
第二个思路就是动态规划了。
首先计算一个diff数组,意义为diff【i】=prices【i+1】-prices【i】。
比较序列中差值最大的情况,即为累加diff。
此时需要注意如果累加和小于0,则就要置为0(实际意义为不进行交易)
时间复杂度降为O(n)
class Solution
{
public:
int maxProfit(vector<int>& prices)
{
int length=prices.size();
if(length==0||length==1)
{
return 0;
}
int diff[length-1]={0};
for(int i=0;i<length-1;i++)
{
diff[i]=prices[i+1]-prices[i];
}
int profit=0;
int temp=0;
for(int i=0;i<length-1;i++)
{
temp=max(0,diff[i]+temp);
profit=max(temp,profit);
}
return profit;
}
};