第一种方法是一直寻找股票的最低点,然后存储在minprice里,用当前的价格减去最低值得出利润,这个利润是每次都在更新(为了得到最大的利润值)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int minprice =1e4; // 它最大多大就设置多大,看下面题目的要求范围
int maxProfit=0; //初始利润
for(auto price: prices) //C++11 auto 循环获取prices的值
{
maxProfit = max(maxProfit,price-minprice); //这里获取此时利润,因为这是在判断第一个值,所以price-minprice只是用来判断的,关键第一个值要取0
minprice = min(minprice,price); //缩小,取最小价格
}
return maxProfit;
}
};
第二种方法其实思路和第一种差不多,不过第二种方法用的是动态规划法,将每一次获得利润存入dp数组里,每次更新dp数组。
class Solution { public: int maxProfit(vector<int>& prices) {
int n = prices.size(); //获取prices个数
if(n == 0) return 0; //如果等于0,没必要继续
int minprice = prices[0]; //获取第一个值,因为利润差都是在第二个才开始的
vector<int>dp(n,0); //创建dp数组
for(int i=1;i<n;i++)
{ minprice = min(minprice,prices[i]); //获取当前的价格最低值
dp[i] = max(dp[i-1],prices[i]-minprice); //dp数组存当前最高利润
}
return dp[n-1]; //返回dp数组的最后一个数,则是最大利润
}
};