Created
March 9, 2016 23:29
-
-
Save gabhi/71363a0901ed0a26596b to your computer and use it in GitHub Desktop.
SingleSellProfit.python
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
# Let min = arr[0] | |
# For k = 1 to length(arr): | |
# If arr[k] < min, set min = arr[k] | |
# If profit < arr[k] - min, set profit = arr[k] - min | |
# | |
# This is short, sweet, and uses only O(n) time and O(1) memory. The beauty of | |
# this solution is that we are quite naturally led there by thinking about how | |
# to update our answer to the problem in response to seeing some new element. | |
# In fact, we could consider implementing this algorithm as a streaming | |
# algorithm, where at each point in time we maintain the maximum possible | |
# profit and then update our answer every time new data becomes available. | |
# | |
# The final version of this algorithm is shown here: | |
def DynamicProgrammingSingleSellProfit(arr): | |
# If the array is empty, we cannot make a profit. | |
if len(arr) == 0: | |
return 0 | |
# Otherwise, keep track of the best possible profit and the lowest value | |
# seen so far. | |
profit = 0 | |
cheapest = arr[0] | |
# Iterate across the array, updating our answer as we go according to the | |
# above pseudocode. | |
for i in range(1, len(arr)): | |
# Update the minimum value to be the lower of the existing minimum and | |
# the new minimum. | |
cheapest = min(cheapest, arr[i]) | |
# Update the maximum profit to be the larger of the old profit and the | |
# profit made by buying at the lowest value and selling at the current | |
# price. | |
profit = max(profit, arr[i] - cheapest) | |
return profit | |
# To summarize our algorithms, we have seen | |
# | |
# Naive: O(n ^ 2) time, O(1) space | |
# Divide-and-conquer: O(n log n) time, O(log n) space | |
# Optimized divide-and-conquer: O(n) time, O(log n) space | |
# Dynamic programming: O(n) time, O(1) space |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment