Minimum number of days required to complete the work
Last Updated :
24 Feb, 2023
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 of which can be completed.
Also, it is mentioned that each work has to be completed according to the non-decreasing date of the array D1[].
The task is to find the minimum number of days required to complete the work in 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
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++
#include <bits/stdc++.h>
using namespace std;
#define inf INT_MAX
int minimumDays( int N, int D1[], int D2[])
{
int ans = -inf;
vector<pair< int , int > > vect;
for ( int i = 0; i < N; i++)
vect.push_back(make_pair(D1[i], D2[i]));
sort(vect.begin(), vect.end());
for ( int i = 0; i < N; i++) {
if (vect[i].second >= ans)
ans = vect[i].second;
else
ans = vect[i].first;
}
return ans;
}
int main()
{
int N = 3;
int D1[] = { 6, 5, 4 };
int D2[] = { 1, 2, 3 };
cout << minimumDays(N, D1, D2);
return 0;
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class Pair {
int x, y;
Pair( int a, int b)
{
this .x = a;
this .y = b;
}
}
class GFG {
static int inf = Integer.MIN_VALUE;
public static int minimumDays( int N, int D1[], int D2[])
{
int ans = -inf;
ArrayList<Pair> list = new ArrayList<Pair>();
for ( int i = 0 ; i < N; i++)
list.add( new Pair(D1[i], D2[i]));
Collections.sort(list, new Comparator<Pair>() {
@Override public int compare(Pair p1, Pair p2)
{
return p1.x - p2.x;
}
});
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;
}
public static void main(String[] args)
{
int N = 3 ;
int D1[] = new int [] { 6 , 5 , 4 };
int D2[] = new int [] { 1 , 2 , 3 };
System.out.print(minimumDays(N, D1, D2));
}
}
|
Javascript
<script>
function minimumDays(N, D1, D2)
{
var ans = -1000000000;
var vect = [];
for ( var i = 0; i < N; i++)
vect.push([D1[i], D2[i]]);
vect.sort((a,b)=>a-b)
for ( var i = 0; i < N; i++) {
if (vect[i][1] >= ans)
ans = vect[i][1];
else
ans = vect[i][0];
}
return ans;
}
var N = 3;
var D1 = [6, 5, 4 ];
var D2 = [1, 2, 3 ];
document.write( minimumDays(N, D1, D2));
</script>
|
Python3
def minDaysWork(n, day1, day2):
ans = 0
combined = [[] for i in range (n)]
for i in range ( len (day1)):
combined[i] = [day1[i], day2[i]]
combined.sort()
for i in range ( len (day1)):
if (combined[i][ 1 ] > = ans):
ans = combined[i][ 1 ]
else :
ans = combined[i][ 0 ]
return ans
N = 3
D1 = [ 6 , 5 , 4 ]
D2 = [ 1 , 2 , 3 ]
print (minDaysWork(N, D1, D2))
|
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Pair {
public int x, y;
public Pair( int a, int b) {
this .x = a;
this .y = b;
}
}
class GFG {
static int inf = int .MinValue;
public static int MinimumDays( int N, int [] D1, int [] D2) {
int ans = -inf;
List<Pair> list = new List<Pair>();
for ( int i = 0; i < N; i++)
list.Add( new Pair(D1[i], D2[i]));
list.Sort((p1, p2) => p1.x - p2.x);
for ( int i = 0; i < N; i++) {
if (list[i].y >= ans)
ans = list[i].y;
else
ans = list[i].x;
}
return ans;
}
public static void Main( string [] args) {
int N = 3;
int [] D1 = new int [] { 6, 5, 4 };
int [] D2 = new int [] { 1, 2, 3 };
Console.Write(MinimumDays(N, D1, D2));
}
}
|
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...