Stock Optimizer!
February 19, 2020
AlgoDaily code challenge, Day 35.
Stock Buy and Sell Optimization
This is a classic technical interview question that I’ve seen a number of times in real life interviews. Let’s say you’re given an array of stock prices, with each element being an integer that represents a price in dollars.
// [ 10, 7, 6, 2, 9, 4 ]
Each index of the array represents a single day, and the the element at that index is the stock price for that given day. This means that the array below represents:
// const prices = [ 10, 7, 6, 2, 9, 4 ];
// Day 0 - a price of `$10`
// Day 1 - `$7`
// Day 2 - `$6` (and so on...)
Given the ability to only buy once and sell once, our goal is to maximize the amount of profit (selling price - purchase price) that we can attain and return that value. Note the only caveat is that that we cannot sell a stock before we buy it, which is important in identifying a solution.
Can you write a stock optimizer method called stockOptimizer
? See the following examples for further clarification:
// stockOptimizer([ 10, 7, 6, 2, 9, 4 ])
// 7
For the above example, the max profit is made when we buy on day/index 3
(when the price is 2
) and sell on day/index 4
(when the price is 9
) 9 - 2
gives us 7
, which is returned by the function. Let’s do another example.
stockOptimizer([9, 8, 6, 5, 3])
// 0
From a quick glance, it seems like there’s enough price differences to generate a profit. However, notice that the price drops every day, and thus we can’t have a profit since we’re required to buy before selling.
My Solution:
// Solution:
var stocksArray = [10, 7, 6, 4, 9, 4];
var highestPossibleProfit = 0;
function stockOptimizer(arr) {
for (i = 0; i < arr.length; i++) {
for (x = 1; x < arr.length; x++) {
if (
arr[i + x] - arr[i] > 0 &&
arr[i + x] - arr[i] > highestPossibleProfit
) {
highestPossibleProfit = arr[i + x] - arr[i];
}
}
}
}
stockOptimizer(stocksArray);
console.log("Stock Array = " + stocksArray);
console.log("Maximum possible profit = $" + highestPossibleProfit);
Again, pretty simple. Use a nested for loop and keep a “highestPossibleProfit” integer variable. As the for loops run they check if the difference between the two current array elements is > than the current highestPossibleProfit integer.
Yep. Works, simple, clear. What’s not to love?
-mr
Written by Matthew Riddett who lives and works in Victoria BC, building fun and useful things. You can follow him on Twitter