-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
121. Best Time to Buy and Sell Stock (#100)
- Loading branch information
Showing
3 changed files
with
111 additions
and
0 deletions.
There are no files selected for viewing
95 changes: 95 additions & 0 deletions
95
LeetcodeProblems/Algorithms/easy/Best_Time_to_buy_and_sell_stock.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/* | ||
121. Best Time to Buy and Sell Stock | ||
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/ | ||
Problem: | ||
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 | ||
*/ | ||
/* | ||
Approach: | ||
We will use a Two pointers strategy (Left and Right pointers). | ||
The first will start pointing to the first element, and the right to the second position of array. | ||
The Left is to buy stock and Right is to sell stock | ||
We initialize our maxProfitValue as 0. | ||
Now we will start our while loop, and we will run till our | ||
Right pointer less than the array's length. | ||
For Example: | ||
prices=[7,1,5,3,6,4] | ||
Note: | ||
prices[left] --> buy stock | ||
prices[right] --> sell stock | ||
We will check the price at the right and left pointer | ||
step 1: | ||
price[left]=7 price[right]=1 profit=-6 | ||
here, price[left] is greater than price[right], so we will move the left pointer to the right position | ||
and increment our right pointer by 1. We always want our left point to be the minimum. | ||
step 2: | ||
price[left]=1 price[right]=5 profit=4 | ||
here, price[left] is less than price[right], which means we will get profit, | ||
so we will update our maxProfitValue and move our right pointer alone | ||
step 3: | ||
price[left]=1 price[right]=3 profit=2 | ||
here, price[left] is less than price[right], we will get profit, so we will compare the maxProfitValue with the current profit. | ||
We will update our maxProfitValue and move our right pointer alone | ||
step 4: | ||
price[left]=1 price[right]=6 profit=5 | ||
same logic as above | ||
step 5: | ||
price[left]=1 price[right]=4 profit=3 | ||
same logic as above | ||
*/ | ||
|
||
const maxProfit = (prices) => { | ||
let left = 0; // Buy | ||
let right = 1; // sell | ||
let maxProfitValue = 0; | ||
while (right < prices.length) { | ||
if (prices[left] < prices[right]) { | ||
let profit = prices[right] - prices[left]; // our current profit | ||
|
||
maxProfitValue = Math.max(maxProfitValue, profit); | ||
} else { | ||
left = right; | ||
} | ||
right++; | ||
} | ||
return maxProfitValue; | ||
}; | ||
|
||
module.exports.maxProfit = maxProfit; |
15 changes: 15 additions & 0 deletions
15
LeetcodeProblemsTests/Algorithms/easy/Best_Time_to_buy_and_sell_stock_Test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
const assert = require("assert"); | ||
const maxProfitEqual = require("../../../LeetcodeProblems/Algorithms/easy/Best_Time_to_buy_and_sell_stock").maxProfit; | ||
|
||
function test() { | ||
assert.deepEqual( | ||
maxProfit([7,1,5,3,6,4]), | ||
5 | ||
); | ||
assert.deepEqual( | ||
maxProfit([7,6,4,3,1]), | ||
0 | ||
); | ||
} | ||
|
||
module.exports.test = test; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters