Problem of the day
You have been given stock values/prices for N number of days. Every i-th day signifies the price of a stock on that day. Your task is to find the maximum profit which you can make by buying and selling the stocks.
Note :You may make as many transactions as you want but can not have more than one transaction at a time i.e, if you have the stock, you need to sell it first, and then only you can buy it again.
The first line contains an integer 't' which denotes the number of test cases or queries to be run. Then the test cases follow.
The first line of each test case or query contains an integer 'N' representing the total number of days for which you have stock prices.
The second line contains 'N' single space-separated integers representing the price of the stock on i-th day.
Output Format :
For each test case, print the maximum profit that you can earn.
Output for every test case will be printed in a separate line.
Note :
You are not required to print anything explicitly. Just implement the function.
1 <= t <= 10^2
0 <= N <= 10^5
Time Limit: 1 sec
1
7
1 2 3 4 5 6 7
6
We can make the maximum profit by buying the stock on the first day and selling it on the last day.
1
7
7 6 5 4 3 2 1
0
We can make the maximum profit by not buying the stock.
Try to consider all possibilities of buying and selling stocks and see which one gives you the maximum profit.
Let's say we have stock values of two days, say, [20, 30].
One must have to buy the stock first in order to sell it in the coming days.
So,
1. if I choose to buy the stock on first day for a value of 20 and sell it on the second day for a value of 30, I can earn a max profit of 10.
2. If I chose to skip day 1, then buying the stock on day 2 will put me in lose since there are no further days on which I can sell the stock. Hence, in this case, day 2 has to be skipped in order to make a max profit of 0.
Among these two scenarios, the first case yields me maximum profit and hence the answer.
This means, for every day, I may choose to buy or skip the stock. Once bought, I have to sell it in the following days to yield a max profit. Hence, to explore all the different possibilities,
O(N ^ N), Where N is the total number of days
Since for every index, you recurse on the array from that index till the end
O(N), Where N is the total number of days
Since at any time the maximum functions call that would exist in the stack will be N