股票的最大利润

股票的最大利润

题目描述:

股票的最大利润_第1张图片

解题思路
  • 股票交易的利润来自股票买入和卖的价格差,当然,我们只能在股票买入了之后再将其卖出。如果把股票买入的价格和卖出的价格的两个数字组成一个数对,那么利润就是这个数对的值,最大的利润,就是这个数对的最大值
  • 这个题,当然可以利用暴力法来进行解决,也就是找出数组中所有的数对,并且逐一求出他们之间的差值,由于长度为n的数组中存在有n^2个数对,因此该算法的时间复杂度为n方,当然,也可以换另一种思路
  • 先定义一个函数为当卖出价为数组中第i个数字时可能获得的最大利润,显然,再卖出价固定的时候,买入价最低的时候,利润是最大的,也就是说,如果扫描到数组中第i个数字的时候,只要我们可以记住前面数字中最小的一个,我们就完全可以求出利润的最大值来。
代码如下:
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 0)
            return 0;
        int minPrice = prices[0];
        int maxGap = 0;
        for(int i = 0; i < prices.size(); i++){
            minPrice = min(minPrice, prices[i]); // 更新最小值
            maxGap = max(maxGap, prices[i] - minPrice); // 更新最大值
        }
        return maxGap;
    }
};
代码二:
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.empty())
            return 0;
        int maxdiff = 0, minprice = prices[0];
        for (int i = 1; i < prices.size(); ++i) {
            if (prices[i] < minprice)
                minprice = prices[i];
            else 
            {
                int temp = prices[i] - minprice;
                if (temp > maxdiff) 
                    maxdiff = temp;
            }
        }
        return maxdiff;
    }
};
测试用例
  • 功能测试:存储股票价格的数组无序,单调递增, 单调递减
  • 边界值测试:存储股票价格的数组中只有两个元素
  • 特殊输入测试:指向数组的指针为nullptr

你可能感兴趣的:(剑指offer)