Número mínimo de días requeridos para completar el trabajo.

Dadas N obras numeradas del 1 al N. Dadas dos arrays, D1[] y D2[] de N elementos cada una. Además, a cada número de trabajo W(i) se le asignan días, D1[i] y D2[i] ( Tal que, D2[i] < D1[i] ) cualquiera de los cuales puede completarse. 
Además, se menciona que cada trabajo debe completarse de acuerdo con la fecha no decreciente de la array D1[] .
La tarea es encontrar el número mínimo de días necesarios para completar el trabajo en orden de días no decreciente en D1[].

Ejemplos

Entrada: 
N = 3 
D1[] = {5, 3, 4} 
D2[] = {2, 1, 2} 
Salida: 2
Explicación: 
3 obras deben completarse. El primer valor en Line(i) es D1(i) y el segundo valor es D2(i) donde D2(i) < D1(i). El trabajador inteligente puede terminar el segundo trabajo en el Día 1 y luego tanto el tercer trabajo como el primero en el Día 2, manteniendo así el orden no decreciente de D1[], [3 4 5].

Entrada: 
N = 6 
D1[] = {3, 3, 4, 4, 5, 5} 
D2[] = {1, 2, 1, 2, 4, 4} 
Salida:

Recomendado: pruebe su enfoque en {IDE} primero, antes de pasar a la solución.

Enfoque: La solución es codicioso. El trabajo (i) se puede ordenar aumentando D1[i], rompiendo los empates aumentando D2[i]. Si consideramos las obras en este orden, podemos intentar terminar las obras lo antes posible. En primer lugar, complete el primer trabajo en D2[1]. Pasa al segundo trabajo. Si podemos completarlo en el día D2[2] tal que (D2[1]<=D2[2]), hágalo. De lo contrario, haga el trabajo el día D[2]. Repetir el proceso hasta completar el N-ésimo trabajo, manteniendo el día del último trabajo. 
A continuación se muestra la implementación del enfoque anterior. 

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;
}

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

Javascript

<script>
  
// Javascript program to find the minimum
// number days required
 
// Function to find the minimum
// number days required
function minimumDays(N, D1, D2)
{
    // initialising ans to least value possible
    var ans = -1000000000;
 
    // vector to store the pair of D1(i) and D2(i)
    var vect = [];
 
    for (var i = 0; i < N; i++)
        vect.push([D1[i], D2[i]]);
     
 
    // sort by first i.e D(i)
    vect.sort((a,b)=>a-b)
 
    // Calculate the minimum possible days
    for (var i = 0; i < N; i++) {
        if (vect[i][1] >= ans)
            ans = vect[i][1];
        else
            ans = vect[i][0];
    }
 
    // return the answer
    return ans;
}
 
// Driver Code
// Number of works
var N = 3;
 
// D1[i]
var D1 = [6, 5, 4 ];
 
// D2[i]
var D2 = [1, 2, 3 ];
document.write( minimumDays(N, D1, D2));
 
 
</script>
Producción: 

6

 

Publicación traducida automáticamente

Artículo escrito por Subash23 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *