目录
1.题目描述
2.题目分析
3.编写代码
4.总结
这是牛客网上的一道题目
1.题目描述
题目链接:买卖股票的最好时机(一)_牛客题霸_牛客网 (nowcoder.com)
2.题目分析
我们看到这个题目中一个数组表示每一天的股价,那么最大利润怎么算呢,我们用图片来表示
假设这是我们输入的数组
根据题目的意思,我们需要在股价最低的时候买入,在股价最高的时候抛出;但是这有一个问题,我们只能在买入当天以后的股价中找利润最大的,如果没有最大的,那就返回0;我们推理一下
-
第一天:最小值8 利润:8-8=0
-
第二天:最小值8 利润:9-8=1
-
第三天:最小值2 利润:2-2=0
-
第四天:最小值2 利润:4-2=2
-
第五天:最小值2 利润:10-2=8
-
第六天:最小值1 利润:1-1=0
-
......
-
依次递推即可知道:最大利润值即为8
3.编写代码
根据这个逻辑,写代码的时候我们需要初始化最低股价min,最大效益maxProfit,当前股价price
- 当前股价我们需要假设每一天的情况,所以我们用for循环遍历数组实现
- 最低股价我们假设数组的第一个元素是最低股价,然后与当前股价比较得出最低股价
- 每一天的最大利润是当前股价减去最低股价
- 比较每天的最大利润,得出所有最大利润中的最大利润返回
- 没有利润则返回0
我们编写出下面这段代码
int maxProfit(int* prices, int pricesLen ) {
// write code here
int min=*prices;
int maxProfit=0;//初始化最大利润
int price=0;//初始化当前股价
for(int k=0;k<pricesLen;k++){
price=prices[i];
min=min<price?min:price;//求出当前股价之前的最低股价
maxProfit=maxProfit<(price-min)?(price-min):maxProfit;
}
return maxProfit;
}
4.总结
作为程序员,拿到题目后一定不会是立刻打开编译器写代码的,我们需要先分析题目,梳理解决问题的逻辑
条理清晰,才能写出高效的代码
一起加油吧!小杜陪各位一起成长