美文网首页程序员坚持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