1. 程式人生 > >[LeetCode] Best Time to Buy and Sell Stock

[LeetCode] Best Time to Buy and Sell Stock

lee share ice com 使用 nbsp leetcode example !=

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.

只進行一次交易,使得到最大的利潤。首先想到使用蠻力算法兩層for循環遍歷數組。結果導致超時。

技術分享
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.size() == 0 || prices.size() == 1)
            return
0; int res = 0, mindiff = INT_MAX; for (int i = 0; i != prices.size() - 1; i++) { for (int j = i + 1; j != prices.size(); j++) { int tmp = prices[j] - prices[i]; if (tmp >= 0) res = max(res, tmp); } }
return res; } };
TLE

接著想了一個辦法就是遍歷一次數組。在遍歷的同時比較出最小的購買價格,然後用這一天以後的每天價格減去這個最小購買價格取最大值即可。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.size() == 0 || prices.size() == 1)
            return 0;
        int res = 0, minDiff = INT_MAX;
        for (int i = 0; i != prices.size(); i++) {
            minDiff = min(minDiff, prices[i]);
            res = max(res, prices[i] - minDiff);
        }
        return res;
    }
};
// 6 ms

[LeetCode] Best Time to Buy and Sell Stock