思路
这道题的核心在于找两个数之间的最大差值(当然,一定得是后面数-前面数,因为买入在卖出前)。暴力求解法很容易想到,这里不做赘述。
由于核心在于不断遍历容器中的值,每次遍历都让该值减去前面的最小值。得出的结果存放在ans变量中。ans总是存储最大差值,因此要不断更新,所以核心就在于:
- 每次遍历,都要记录前面数的最小值。
- 每次更新ans的值。
代码实例
class Solution {
public:
/**
*
* @param prices int整型vector
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
int minV=prices.at(0); // 初始化最小值为容器一个值
int ans=0;
for(auto x : prices) {
// 在遍历的过程中,不断更新我们的最小值
minV=min(minV,x);
// 然后维护获得的最大差值(收益)
ans=max(ans,x-minV);
}
return ans;
}
};