📜  完成工作所需的最少天数

📅  最后修改于: 2021-10-26 05:52:08             🧑  作者: Mango

给定 N 个作品,编号从 1 到 N。给定两个数组,分别为 N 个元素的 D1[] 和 D2[]。此外,每个工作编号 W(i) 都被分配了天数,D1[i] 和 D2[i](这样,D2[i] < D1[i] )其中任何一个都可以完成。
另外,提到每项工作都必须根据数组 D1[]非递减日期完成。
任务是在 D1[] 中找到按天数非递减顺序完成工作所需的最少天数

例子

推荐:在继续解决方案之前,请先在{IDE}上尝试您的方法。

方法:解决方案是贪婪的。 work(i) 可以通过增加 D1[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


Javascript


输出:
6

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程