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