给定N个从1到N的作品。给定两个数组N1的每个数组D1 []和D2 []。而且,每个工作编号W(i)被分配了天数D1 [i]和D2 [i](使得D2 [i] <D1 [i] ),或者可以在其上完成。
另外,还提到必须根据数组D1 []的非递减日期完成每个工作。
任务是在D1 []中以不减少的天数找到完成工作所需的最少天数。
例子:
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
建议:在继续解决方案之前,请先在{IDE}上尝试使用您的方法。
方法:解决方案是贪婪的。可以通过增加D1 [i]来排序作品(i),通过增加D2 [i]来打破联系。如果我们按此顺序考虑作品,我们可以尝试尽早完成作品。首先,完成关于D2 [1]的第一个工作。移至第二项工作。如果我们可以在D2 [2]时完成(D2 [1] <= D2 [2]),则可以完成它。否则,请在D [2]天进行工作。重复该过程,直到完成第N个工作,并保留最新工作的日期。
下面是上述方法的实现
C++
// C++ program to find the minimum
// number days required
#include
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 > 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<
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
list = new ArrayList();
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()
{
@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
6