这道题目的思路:
用一个变量first表示所遇到的最小的数字,第二个变量res来表示所遇到的最大的差价(也就是最大利润),然后一直遍历过去,当遇到比first更小的数字的时候,将其赋值给first,当遇到更大的利润的时候,将其赋值给res,做一次循环即可,时间复杂度为O(n),空间复杂度为O(1),具体代码如下:
class Solution
{
public:
int maxProfit(vector<int>& prices)
{
if (prices.size() < 2)
{
return 0;
}
int res = 0;
int first = prices[0];
for (int i = 1; i < prices.size(); i++)
{
if (prices[i] < first)
{
first = prices[i];
}
if (prices[i] - first > res)
{
res = prices[i] - first;
}
}
return res;
}
};