本题的意思是一个整数数组代表一支股票一段时间的价格情况,每个元素代表每天的价格,并且只能有一次交易,求可能获得的最大利润是多少。其实就是求一个整数数组中两个数之间的最大差值,并且位于前面的数要小。
我采用动态规划的算法来解决本题。如果想要求一个有n个元素的整数数组的最大差值,可以在已经求出前n - 1个元素组成的数组的最大差值的基础上,判断第n个元素是否会与前面的元素产生更大的差值,如果有更大的差值,则更新最大差值;按照这种思路一直往前推,可以从数组的前两个元素组成的数组开始,求它们两个的最大差值,然后再一直往后推,遍历数组,最终求出最大差值。
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.empty() || prices.size() == 1) {
return 0;
}
int min = prices[0] < prices[1] ? prices[0] : prices[1];
int maxPro = prices[0] < prices[1] ? prices[1] - prices[0] : 0;
for (int i = 2; i < prices.size(); ++i) {
if (prices[i] - min > maxPro) {
maxPro = prices[i] - min;
} else if (prices[i] < min) {
min = prices[i];
}
}
return maxPro;
}
};