7---LeetCode【tag: Array】【Stock I】|C語言|總結

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Example 1:

Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)

Example 2:

Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.

問題分析:

看半天沒明白這題目什麼意思,我還以爲是自己閱讀理解差,看了討論才曉得

Please explain the problem more clearly!!!

翻譯下就是:

1. 只能先買後賣,並且都只能進行一次;

2. 返回最大的利潤

代碼一:

int maxProfit(int* prices, int pricesSize) {
    
    int buy = prices[0];
    int profit = 0;
    for (int i = 0; i < pricesSize; i++) {
        if (prices[i] < buy)
            buy = prices[i];
        if (profit < prices[i] - buy)
            profit = prices[i] - buy;
    }
    return profit;
}

代碼二:

int maxProfit(int* prices, int pricesSize) {
    
    int buy = prices[0];
    int profit = 0;
    for (int i = 0; i < pricesSize; i++) {
        buy = (prices[i] < buy)? prices[i]: buy;
        profit = (profit < prices[i] - buy)? prices[i] - buy: profit;
    }
    return profit;
}

代碼說明:

相當於聲明瞭兩個寄存器buy和profit,隨着時間推移(即i++),buy和profit不斷更新,直到循環結束。

思考:

爲什麼代碼一和代碼二的效率不一樣,代碼二效率更高。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章