BestTimetoBuyAndSellStocks
Best Time to Buy and Sell Stocks
Problem: Given an array of stock prices, find the maximum profit that can be made by buying and selling stocks.
Problem Statement
Lets discuss brute force first :
Steps to solve this problem using brute force approach :
1 . Iterate over the array and for each element find the maximum element in the right part of the array.
2 . Find the difference between the maximum element and the current element.
3 . Return the maximum difference.
Brute Force Approach
class Solution {
public:
int maxProfit(vector<int>& prices) {
// base case
if(prices.size() == 1){
return 0;
}
int max_profit = INT_MIN;
for(int i = 0 ; i < prices.size() ; i++){
for(int j = i + 1 ; j < prices.size() ; j++){
max_profit = max(max_profit,prices[j] - prices[i]);
}
}
return max_profit;
}
};
Time Complexity : O(n^2) Space Complexity : O(1) -> No extra space is used.
Optimized Approach
Lets discuss optimized approach now :
Steps to solve this problem using optimized approach :
1 . Iterate over the array and for each element find the minimum element in the left part of the array.
2 . Find the difference between the current element and the minimum element.
3 . Return the maximum difference.
Optimized Approach
class Solution {
public:
int maxProfit(vector<int>& prices) {
// base case
if(prices.size() == 1){
return 0;
}
int max_profit = INT_MIN;
int min_price = INT_MAX;
for(int i = 0 ; i < prices.size() ; i++){
min_price = min(min_price,prices[i]);
max_profit = max(max_profit,prices[i] - min_price);
}
return max_profit;
}
};
Time complexity of this approach : O(n) -> because we are iterating over the array only once. Space complexity of this approach : O(1) -> No extra space is used.