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

📅  最后修改于: 2021-04-27 17:45:44             🧑  作者: Mango

给定N个从1到N的作品。给定两个数组N1的每个数组D1 []和D2 []。而且,每个工作编号W(i)被分配了天数D1 [i]和D2 [i](使得D2 [i] <D1 [i] ),或者可以在其上完成。

另外,还提到必须根据数组D1 []的非递减日期完成每个工作。

任务是在D1 []中以不减少的天找到完成工作所需的最少天数

例子

建议:在继续解决方案之前,请先在{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