# Java Program to find Maximum profit by buying and selling a share atmost twice

## Maximum Profit by Buying And Selling a Share Atmost twice in Java

Here, in this page we will discuss the program to find maximum profit by buying and selling a share atmost twice in Java .
In daily share trading, a buyer buys shares in the morning and sells them on the same day. If the trader is allowed to make at most 2 transactions in a day, whereas the second transaction can only start after the first one is complete Buy->Sell->Buy->Sell. We are given with stock prices throughout the day, We need to  find out the maximum profit that a share trader could have made.

## Method 1

• Create an array say profit of size n and initialize all its value to 0.
• Iterate price[] from right(n-1) to left(0) and update profit[i] such that profit[i] stores maximum profit achievable from one transaction in sub-array price[i..n-1].
• Iterate price[] from left to right and update profit[i] such that profit[i] stores maximum profit such that profit[i] contains maximum achievable profit from two transactions in sub-array price[0..i].
• After completing the iteration print value of profit[n-1].

## Code to find Maximum profit by buying and selling a share atmost twice in Java

Run
```public
class Main {
static int maxProfit(int price[], int n) {
// Create profit array
// and initialize it as 0
int profit[] = new int[n];

for (int i = 0; i < n; i++) profit[i] = 0;
int max_price = price[n - 1];

for (int i = n - 2; i >= 0; i--) {
// max_price has maximum
// of price[i..n-1]

if (price[i] > max_price) max_price = price[i];
profit[i] = Math.max(profit[i + 1], max_price - price[i]);
}
int min_price = price[0];
for (int i = 1; i < n; i++) {

// min_price is minimum
// price in price[0..i]

if (price[i] < min_price) min_price = price[i];
profit[i] = Math.max(profit[i - 1], profit[i] + (price[i] - min_price));
}

int result = profit[n - 1];
return result;
}

// Driver Code
public
static void main(String args[]) {
int price[] = {2, 30, 15, 10, 8, 25, 80};
int n = price.length;
System.out.println("Maximum Profit = " + maxProfit(price, n));
}
}```
`Maximum Profit = 100`

## Method 2

• Initialize four variables for taking care of the first buy, first sell, second buy, second sell.
• Set first buy and second buy as INT_MIN and first and second sell as 0.
• This is to ensure to get profit from transactions.
• Iterate through the array and return the second buy as it will store maximum profit.
Run
```public

class Main {

static int maxtwobuysell(int arr[], int size) {

int first_sell = 0;

int second_sell = 0;

for (int i = 0; i < size; i++) {
first_sell = Math.max(first_sell, first_buy + arr[i]);

second_sell = Math.max(second_sell, second_buy + arr[i]);
}
return second_sell;
}

public
static void main(String[] args) {
int arr[] = {2, 30, 15, 10, 8, 25, 80};
int size = arr.length;
`Maximum Profit = 100`