大致思路如下:從左往右遍歷,先用一個變量記錄第一個數,然後第二個數開始,如果比記錄的數小,就重新賦值,否則就計算這兩個數的差值。遍歷完一遍之後也就找到了最大的差值。時間複雜度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;
}
};