class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0)return 0;
priority_queue<int> value;
int min=prices[0];
for(int i=0;i<prices.size();++i)
{
if(prices[i]<min)min=prices[i];
value.push(prices[i]-min);
}
return value.top();
}
};
上述代码空间复杂度过大,运行内存感人。经分析,主要是优先队列容器的缘故,每次添加元素都会排序,也很浪费时间,故重新写了
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0)return 0;
int min=prices[0];
for(int i=0;i<prices.size();++i)
{
if(prices[i]<=min)min=prices[i];
prices[i]-=min;
}
min=0;
for(int i=0;i<prices.size();++i)
{
if(min<prices[i])min=prices[i];
}
return min;
}
};
就比较正常了,本题就是正常动态规划问题,不难
然后优化了一下,只需要一个循环。
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0)return 0;
int min=prices[0],key=0;
for(int i=0;i<prices.size();++i)
{
if(prices[i]<=min)min=prices[i];
prices[i]-=min;
if(key<prices[i])key=prices[i];
}
return key;
}
};