Given N works numbered from 1 to N. Given two arrays D1[] and D2[] of N elements each. Also, each work number W(i) is assigned days, D1[i] and D2[i](*Such that, D2[i] < D1[i]*) either on which it can be completed.

Also, it is mentioned that each work has to completed according to **non-decreasing date of the array D1[]**.

The task is to find the **minimum number of days** required to complete the work in a non-decreasing order of days in D1[].

**Examples**:

Input :

N = 3

D1[] = {5, 3, 4}

D2[] = {2, 1, 2}

Output :2

Explanation:

3 works are to be completed. The first value on Line(i) is D1(i) and the second value is D2(i) where D2(i) < D1(i). The smart worker can finish the second work on Day 1 and then both third work and first work in Day 2, thus maintaining the non-decreasing order of D1[], [3 4 5].

Input :

N = 6

D1[] = {3, 3, 4, 4, 5, 5}

D2[] = {1, 2, 1, 2, 4, 4}

Output :4

### Recommended: Please try your approach on __{IDE}__ first, before moving on to the solution.

__{IDE}__**Approach:** The solution is greedy. The work(i) can be sorted by increasing D1[i], breaking the ties by increasing D2[i]. If we consider the works in this order, we can try to finish the works as early as possible. First of all complete the first work on D2[1]. Move to the second work. If we can complete it on day D2[2] such that (D2[1]<=D2[2]), do it. Otherwise, do the work on day D[2]. Repeat the process until we complete the N-th work, keeping the day of the latest work.

Below is the implementation of the above approach

## C++

`// C++ program to find the minimum ` `// number days required ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `#define inf INT_MAX ` ` ` `// Function to find the minimum ` `// number days required ` `int` `minimumDays(` `int` `N, ` `int` `D1[], ` `int` `D2[]) ` `{ ` ` ` `// initialising ans to least value possible ` ` ` `int` `ans = -inf; ` ` ` ` ` `// vector to store the pair of D1(i) and D2(i) ` ` ` `vector<pair<` `int` `, ` `int` `> > vect; ` ` ` ` ` `for` `(` `int` `i = 0; i < N; i++) ` ` ` `vect.push_back(make_pair(D1[i], D2[i])); ` ` ` ` ` ` ` `// sort by first i.e D(i) ` ` ` `sort(vect.begin(), vect.end()); ` ` ` ` ` `// Calculate the minimum possible days ` ` ` `for` `(` `int` `i = 0; i < N; i++) { ` ` ` `if` `(vect[i].second >= ans) ` ` ` `ans = vect[i].second; ` ` ` `else` ` ` `ans = vect[i].first; ` ` ` `} ` ` ` ` ` `// return the answer ` ` ` `return` `ans; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Number of works ` ` ` `int` `N = 3; ` ` ` ` ` `// D1[i] ` ` ` `int` `D1[] = { 6, 5, 4 }; ` ` ` ` ` `// D2[i] ` ` ` `int` `D2[] = { 1, 2, 3 }; ` ` ` ` ` `cout<<minimumDays(N, D1, D2); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find the minimum ` `// number days required ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` ` `// pair class for number of days ` `class` `Pair ` `{ ` ` ` `int` `x, y; ` ` ` ` ` `Pair(` `int` `a, ` `int` `b) ` ` ` `{ ` ` ` `this` `.x = a; ` ` ` `this` `.y = b; ` ` ` `} ` `} ` ` ` `class` `GFG ` `{ ` `static` `int` `inf = Integer.MIN_VALUE; ` ` ` `// Function to find the minimum ` `// number days required ` `public` `static` `int` `minimumDays(` `int` `N, ` `int` `D1[], ` ` ` `int` `D2[]) ` `{ ` ` ` `// initialising ans to ` ` ` `// least value possible ` ` ` `int` `ans = -inf; ` ` ` ` ` `ArrayList<Pair> ` ` ` `list = ` `new` `ArrayList<Pair>(); ` ` ` ` ` `for` `(` `int` `i = ` `0` `; i < N; i++) ` ` ` `list.add(` `new` `Pair(D1[i], D2[i])); ` ` ` ` ` `// sort by first i.e D(i) ` ` ` `Collections.sort(list, ` `new` `Comparator<Pair>() ` ` ` `{ ` ` ` `@Override` ` ` `public` `int` `compare(Pair p1, Pair p2) ` ` ` `{ ` ` ` `return` `p1.x - p2.x; ` ` ` `} ` ` ` `}); ` ` ` `// Calculate the minimum possible days ` `for` `(` `int` `i = ` `0` `; i < N; i++) ` `{ ` ` ` `if` `(list.get(i).y >= ans) ` ` ` `ans = list.get(i).y; ` ` ` `else` ` ` `ans = list.get(i).x; ` `} ` ` ` `return` `ans; ` `} ` ` ` `// Driver Code ` `public` `static` `void` `main (String[] args) ` `{ ` ` ` `// Number of works ` ` ` `int` `N = ` `3` `; ` ` ` ` ` `// D1[i] ` ` ` `int` `D1[] = ` `new` `int` `[]{` `6` `, ` `5` `, ` `4` `}; ` ` ` ` ` `// D2[i] ` ` ` `int` `D2[] = ` `new` `int` `[]{` `1` `, ` `2` `, ` `3` `}; ` ` ` ` ` `System.out.print(minimumDays(N, D1, D2)); ` `} ` `} ` ` ` `// This code is contributed by Kirti_Mangal ` |

*chevron_right*

*filter_none*

**Output:**

6

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Minimum number of distinct powers of 2 required to express a given binary number
- Minimum number of integers required such that each Segment contains at least one of them
- Minimum number of operations required to reduce N to 0
- Minimum number of operations required to reduce N to 1
- Minimum number of bottles required to fill K glasses
- Minimum number of pairs required to make two strings same
- Minimum number of swaps required to sort an array | Set 2
- Minimum deletions required such that any number X will occur exactly X times
- Minimum Number of Platforms Required for a Railway/Bus Station
- Minimum number of subsequences required to convert one string to another
- Minimum number of swaps required to make the string K periodic
- Minimum number of given operations required to reduce the array to 0 element
- Minimum number of steps required to obtain the given Array by the given operations
- Minimum number of operations required to delete all elements of the array
- Minimum number of operations required to obtain a given Binary String
- Minimum number of colors required to color a Circular Array
- Minimum number of towers required such that every house is in the range of at least one tower
- Find out the minimum number of coins required to pay total amount
- Minimum number of points required to cover all blocks of a 2-D grid
- Minimum number of subsequences required to convert one string to another using Greedy Algorithm

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.