Skip to content

Instantly share code, notes, and snippets.

@rungxanh1995
Last active January 3, 2023 22:33
Show Gist options
  • Save rungxanh1995/cf79a59e8497137e5b4d59520546a22d to your computer and use it in GitHub Desktop.
Save rungxanh1995/cf79a59e8497137e5b4d59520546a22d to your computer and use it in GitHub Desktop.
Though the title of this problem is about the "time" to buy and sell stock, the required answer turned out to be the maximum profit possible. So beware!

You are given an array prices where prices[i] is the price of a given stock on the ith day.

You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

Example 1:

Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

Example 2:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

Constraints:

  • 1 <= prices.length <= 10^5
  • 0 <= prices[i] <= 10^4
class Solution {
public int maxProfit(int[] prices) {
int bestProfit = 0;
int buyIndex = 0;
int sellIndex = buyIndex + 1;
while (sellIndex < prices.length) {
int currentProfit = prices[sellIndex] - prices[buyIndex];
if (currentProfit <= 0) {
buyIndex++;
}
bestProfit = Math.max(bestProfit, currentProfit);
sellIndex++;
}
return bestProfit;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment