思路

这道题的核心在于找两个数之间的最大差值(当然,一定得是后面数-前面数,因为买入在卖出前)。暴力求解法很容易想到,这里不做赘述。
由于核心在于不断遍历容器中的值,每次遍历都让该值减去前面的最小值。得出的结果存放在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;
    }
};