题意理解
给出一组数字,选出两个数,两个数前小后大,最大差值是多少
问题分析
动规思想
大问题转成小问题,小问题逐步扩大。这题考虑前n个数最大利润怎么计算,记录前n个数的最小值,计算最小值和当前值的差值就是当前的最大差值。
其他
链接
class Solution {
public:
int maxProfit(vector<int>& prices) {
int cnt = prices.size();
if (cnt == 0 || cnt == 1) return 0;
int min_val = prices[0];
int max_profit = 0;
for (int i = 1; i < prices.size(); i ++) {
int cur_profit = -1;
//计算当前利润
if (prices[i] > min_val) cur_profit = prices[i] - min_val;
//更新最大利润
if (cur_profit > max_profit) max_profit = cur_profit;
//更新最小值
if (prices[i] < min_val) min_val = prices[i];
}
return max_profit;
}
};