一、题目描述
二、实现思路
先令最低价格等于一个很大的值,最大利润为0
遍历数组,最大利润等于 <上一步最大利润>与<数组中第i个元素 - 最低价格> 中的较大值,这样当遍历第一个元素时,最大利润仍为0 而遍历后面的元素,则可以正确表示最大利润,我觉得这个思路很巧妙
最低价格等于 <当前元素> 与 <上一个最低价格中> 中的较低值
这里我手写了题目描述中输入样例1的代码运行过程
三、ac代码
由于c没有内置的求最大值与最小值的函数,这里我自己定义了func_max() 与 func_min()。
int func_max(int a, int b)
{
if (a > b) return a;
else return b;
}
int func_min(int a, int b)
{
if (a < b) return a;
else return b;
}
int maxProfit(int* prices, int pricesSize){
int minprice = 1e9;
int maxProfit = 0;
for (int i = 0; i < pricesSize; i ++ ) {
maxProfit = func_max(maxProfit, prices[i] - minprice);
minprice = func_min(minprice, prices[i]);
}
return maxProfit;
}
over!