对抗惰性,从今天做起。坚持每天刷leetcode并附带一个题的题目,思路,代码。感兴趣的小伙伴一起坚持来吧(c代码,不过思路都是差不多的)。
题目(难度简单):
给出一个数组,第i个元素代表第i天的股票价格。假设你最多只能买卖一次股票,请求出你最多能赚到多少钱。
Input:[7,1,5,3,6,4]
Output:5
Input:[7,6,5,4,3,2,1]
Output:0(你可以选择不买股票)
思路:
这两天碰到的题都是常规题,今天这个题目显然要用到动态规划的思想。
原始直觉思路:
新建一个数组,储存如果股票留到这一天能再赚的最大钱数。具体方法是计算如果把股票留到明天能再赚多少钱(已经存在新建的数组里面了),加上今天明天的差价,如果这个数小于0,直接赋值成0,即今天就卖掉止损。最后在数组里面选出最大值即可。
改进思路:
既然最后数组的处理是要返回最大值,不如直接在循环中随时更新最大值,不仅省时间,也省去了空间。这样还有一个问题要处理,明天股票能再赚多少钱原来是存在数组里面的,这次也要用一个变量来记录明天能再赚多少钱。
代码:
int maxProfit(int* prices, int pricesSize) {
if(pricesSize==1)
return 0;
int i = pricesSize-2;
int j = 0;
int price = 0;
int max = 0;
while(i>=0)
{
price = prices[i+1]-prices[i]+price;
if(price<0)
price = 0;
if(price>max)
max = price;
i--;
}
return max;
}