Best Time to Buy and Sell Stock

Problem

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.

Solution

public class Solution {
    public int maxProfit(int[] prices) {
        int minPrice = Integer.MAX_VALUE;
        int res = 0;
        for (int price : prices) {
            if (price < minPrice) minPrice = price;
            else if (price - minPrice > res) res = price - minPrice;
        }
        return res;
    }
}

Analysis

This is a variation of problem Best Time to Buy and Sell Stock
The difference is that we are limited to have at most one transaction
Therefore, we need to find out the minPrice and then sell if if there is a price higher that it
That's why we first set minPrice in our solution, and then compare the profit to res
If the prices are all decreasing, we won't update the res and the profit will be 0

Complexity:

  • Time: O(n), single pass
  • Space: O(1), only constant space is used

results matching ""

    No results matching ""