DEV Community

Cover image for Episode 02 - Best time to buy the stock
Vigowebs
Vigowebs

Posted on

Episode 02 - Best time to buy the stock

In this episode, we are going to explain one of the famous question asked in JavaScript interview. You will be given an array of integers which represents the prices of a stock in each day. Your task is to find the best buying and selling price that will give you maximum profit.

The array will be like [6, 1, 2, 5, 7] and the output will be 6. The lowest price of the stock is on the 2nd day which is 1 and the highest price is on 5th day which is 7. So buying at the price of 1 and selling at 7 will give us the profit of 6.

Now lets explore the way to find this in JavaScript.

function findMaximumProfit(prices) {
  const length = prices.length;
  let buyPrice = prices[0];
  let maxProfit = 0;

  for (let i = 1; i < length; i++)  {

    if (buyPrice > prices[i]) {
      buyPrice = prices[i];
    } else {
      maxProfit = prices[i] - buyPrice;
    }    
  }
  return maxProfit;
}

console.log(findMaximumProfit([6, 1, 2, 5, 7])); //6
Enter fullscreen mode Exit fullscreen mode

Code Explanation:

We will first declare few variables: length to store the length of the variable, declare buyPrice and assign the first price from the array, and maxProfit to 0. We will start the iteration from the first index since we already assigned the 0th value to the variable. In each iteration, we will check if the buyPrice is greater than the current price. If so then, we will modify the value to that price. Otherwise, we will check the profit buy subtracting both values. At the end of the loop we will return the value of maxProfit.

This array returns the profit as 6. We need to buy the stock at the price of 1 and sell at the price of 7.

There is also another variation of this questions where the interviewer might ask for the buying and selling date instead of the profit. We can solve that also easily, by tweaking this same code.

function findBuySellDate(prices) {
  const length = prices.length;
  let buyPrice = prices[0];
  let maxProfit = 0;
  let buyDate = 0;
  let dates = [];

  for (let i = 1; i < length; i++)  {
    if (buyPrice > prices[i]) {
      buyPrice = prices[i];
      buyDate = i;
    } else {
      maxProfit = prices[i] - buyPrice;
      dates = [buyDate, i];
    }    
  }
  return dates;
}

console.log(findBuySellDate([6, 1, 2, 5, 7])); // [1, 4]
Enter fullscreen mode Exit fullscreen mode

Running this function with the same code now, will return the indices for the buy and sell.

Check it in our YouTube

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay