- Write a program to maximize the profit by buying and selling stocks.
- Algorithm to gain maximum profit in share trading.
Given the share price of a company for N days in an array. Find the maximum profit we can make by buying and selling stocks on any day. You can buy or sell shares multiple times not necessarily only once. You can do any number of transactions without any brokerage charge.
For Example :
Share Price Array : 20, 45, 76, 42, 15, 37, 100, 120, 90, 105 Output : Buy at : 20 Sell at : 76 Buy at : 15 Sell at : 120
Let inputArray be an integer array if size N containing share prices.
Algorithm to maximize profit for stocks buying and selling
- We can maximize profit by buying shares at local minima and they selling at next local maxima.
- inputArray[i] is local minima if inputArray[i-1] > inputArray[i] < inputArray[i+1]
- inputArray[i] is local Maxima if inputArray[i-1] < inputArray[i] > inputArray[i+1]
- Traverse inputArray and find local minima(buying shares index) and then next local maxima(selling shares index).
- Continue till end of the inputArray. IF we don't find selling index till end of array set last index as selling index.
C program to maximize profit of buying ans selling stocks
#include<stdio.h> #include<limits.h> /*Prints the Optimal Buy and Sell transaction to maximize profit */ void printStockTrade(int *sharePrice, int size) { /* Array to store selling and buying days */ int buy[size/2 +1], sell[size/2 +1]; /* Number of Buy-Sell transactions */ int i, tradeCount = 0; /* We need share prices of atleast two days .. such that we can buy shares on first day and sell on another */ if (size == 1) return; for(i = 0; i < size-1; i++) { /* Find local Minima. sharePrice[i] is local Minima if sharePrice[i-1] > sharePrice[i] < sharePrice[i+1] */ while((i < size-1) && (sharePrice[i+1] <= sharePrice[i])) i++; /* If no local minima found */ if (i == size-1) break; /* Store buying date in buy array, now we have to find selling point */ buy[tradeCount] = i++; /* Find local Maxima. sharePrice[i] is local Maxima if sharePrice[i-1] < sharePrice[i] > sharePrice[i+1] */ while((i < size-1) && (sharePrice[i] >= sharePrice[i-1])) i++; /*Found Local Maxima. Store it in sell Array */ sell[tradeCount] = i-1; tradeCount++; } if (tradeCount == 0) printf("No Profitable Transaction Possible\n"); else { for(i = 0; i < tradeCount; i++) printf("Buy at : %d Sell at : %d\n", sharePrice[buy[i]], sharePrice[sell[i]]); } return; } int main() { int array[10] = {20, 45, 76, 42, 15, 37, 100, 120, 90, 105}; printStockTrade(array, 10); return 0; }Output
Buy at : 20 Sell at : 76 Buy at : 15 Sell at : 120