Skip to content

add : Best time to buy and sell stock program under GREEDY methods #10114

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 8, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Update best_time_to_buy_and_sell_stock.py
  • Loading branch information
cclauss authored Oct 8, 2023
commit a685156731d1215de89cbd28e2587f9810ca7ed2
21 changes: 8 additions & 13 deletions greedy_methods/best_time_to_buy_and_sell_stock.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
"""
Given a list of stock prices,
This program calculates the maximum profit that can be made from a single buy and sell.
We can only complete one transaction (buy one and sell one share of the stock).
We must buy before we can sell.
Given a list of stock prices calculate the maximum profit that can be made from a
single buy and sell of one share of stock. We only allowed to complete one buy
transaction and one sell transaction but must buy before we sell.

Example : prices = [7, 1, 5, 3, 6, 4]
max_profit will return 5 - which is by buying at price 1 and selling at price 6.

This problem can be solved using the concept of "GREEDY ALGORITHM".

We iterate over the price array once, keeping track of the lowest price point
(buy) and the maximum profit we can get at each point.
The greedy choice at each point is to either buy at the current price if
it's less than our current buying price, or sell at the current price if the profit
is more than our current maximum profit.
(buy) and the maximum profit we can get at each point. The greedy choice at each point
is to either buy at the current price if it's less than our current buying price, or
sell at the current price if the profit is more than our current maximum profit.
"""


Expand All @@ -31,10 +29,8 @@ def max_profit(prices: list[int]) -> int:
max_profit: int = 0

for price in prices:
if price < min_price:
min_price = price
elif price - min_price > max_profit:
max_profit = price - min_price
min_price = min(price, min_price)
max_profit = max(price - min_price, max_profit)

return max_profit

Expand All @@ -43,5 +39,4 @@ def max_profit(prices: list[int]) -> int:
import doctest

doctest.testmod()

print(max_profit([7, 1, 5, 3, 6, 4]))