Best Time to Buy and Sell Stock

Updated: Mar 24, 2021

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.


  • 1 <= prices.length <= 105

  • 0 <= prices[i] <= 104


class Solution {
    public int maxProfit(int[] prices) {
        int minprice = prices[0];
        int maxprofit=0;
        for(int i=0;i<prices.length;i++)
            if(prices[i]<minprice) minprice=prices[i];
            else if((prices[i]-minprice)>maxprofit)
                maxprofit = prices[i]-minprice;
        return maxprofit;

Approach 2:

class Solution 
    public int maxProfit(int[] prices) 
       int havingstock,nothavingstock;
        havingstock = -prices[0];
        nothavingstock =0;

        for(int i=1;i<prices.length;i++)
            havingstock = Math.max(havingstock,-prices[i]);
            nothavingstock = Math.max(nothavingstock,havingstock+prices[i]);
        return nothavingstock;

18 views0 comments

Recent Posts

See All

A string s is called good if there are no two different characters in s that have the same frequency. Given a string s, return the minimum number of characters you need to delete to make s good. The f

The numeric value of a lowercase character is defined as its position (1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.