QUESTION-Say you have an array for which the ith element is the price of a given stock on dayi.
If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Note that you cannot sell a stock before you buy one.
Example 1:
Input: [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.
Not 7-1 = 6, as selling price needs to be larger than buying price.
Example 2:
Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.
I believe that this problem can be solved using dynamic programming and before moving on to the solution simply ,I tried to solve this problem using my own approach . I did checked out the brute force algorithm and realized that my approach is not similar to brute force
public class Solution {
public int maxProfit(int prices[]) {
int maxprofit = 0;
for (int i = 0; i < prices.length - 1; i++) {
for (int j = i + 1; j < prices.length; j++) {
int profit = prices[j] - prices[i];
if (profit > maxprofit)
maxprofit = profit;
}
}
return maxprofit;
}
}
Here ,is my approach
class Solution:
def maxProfit(self, prices: List[int]) -> int:
res=0
if not prices:
return 0
idx=prices.index(min(prices))
value=min(prices)
try:
for i in range (idx+1,len(prices)):
res=max(res,prices[i]-value)
except IndexError :
return 0
return res
My code passed the sample test case and 143/200 cases and fails for this one .
Input: [2,4,1]
Output: 0
Expected: 2
How can I improve my code ? How can I make this approach work ? or if this approach is totally wrong please elaborate .
I believe the time complexity of my approach is better than the brute force and therefore,to struggle and make this code work;later check out the dynamic programming approach as well