大致思路如下:从左往右遍历,先用一个变量记录第一个数,然后第二个数开始,如果比记录的数小,就重新赋值,否则就计算这两个数的差值。遍历完一遍之后也就找到了最大的差值。时间复杂度O(n),空间复杂度O(1)代码如下:
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.empty()) return 0;
int min=prices[0],ans=0;
for(int i=0;i<prices.size();i++)
if(min>prices[i]) min=prices[i];
else ans=max(ans,prices[i]-min);
return ans;
}
};