美文网首页程序员坚持LeetCode
跟我坚持刷leetcode(第四天-最大股票利润)

跟我坚持刷leetcode(第四天-最大股票利润)

作者: 北极星光熊 | 来源:发表于2017-04-06 07:00 被阅读353次

对抗惰性,从今天做起。坚持每天刷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;
}

相关文章

网友评论

    本文标题:跟我坚持刷leetcode(第四天-最大股票利润)

    本文链接:https://www.haomeiwen.com/subject/bezxattx.html