关于leetcode里第121题:买卖股票的最佳时机。(C语言)

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/

    关于这道题可是想了我好久,只会简单求解,但是时间上超出了限制。后来看了大佬给出的一点思路,才能够把它做出来而且非常的巧妙,只用遍历一次数组就ok。时间复杂度是O(n)。

代码如下:

int maxProfit(int* prices, int pricesSize){
    int minprince=prices[0];
    int i=0;
    if(pricesSize==1)//如果prices数组里面只有一个元素的话就没必要往下走了,直接return 0.
        return 0;   
    int maxprice=prices[1]-prices[0];//将这个变量要声明在后面不然就会读取数组错误(在pricses大小为一的情况下)。
    for(i=1;imaxprice)//这个是记录是否是在当天包括当天以前是否是最大利润。
            maxprice=prices[i]-minprince;
        }
        return maxprice;
}

当然也有简单求解,只不过时间复杂度是O(n^2)了。

代码如下:

int maxProfit(int* prices, int pricesSize){

    int i=0;
    if(pricesSize==1)
        return 0;
    int max=prices[1]-prices[0];
    for(i=0;imax)
            {
                max=prices[j]-prices[i];
            }
        }
    }
            return max;
}

你可能感兴趣的:(leetcode,算法,c语言)