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

对抗惰性,从今天做起。坚持每天刷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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容