Programe el ascensor para reducir el tiempo total empleado

Dado un número entero k y una array arr[] que representa los pisos de destino para N personas que esperan actualmente en la planta baja y k es la capacidad del ascensor, es decir, el número máximo de personas que puede albergar al mismo tiempo. El ascensor tarda 1 unidad de tiempo en llegar a cualquier piso consecutivo desde el piso actual. La tarea es programar el ascensor de manera que se minimice el tiempo total necesario para llevar a todas las personas a su piso de destino y luego regresar a la planta baja.
Ejemplos: 
 

Entrada: arr[] = {2, 3, 4}, k = 2 
Salida: 12  La
segunda y la tercera persona (pisos de destino 3 y 4) irán en el primer turno tomando 8 (4 + 4) unidades de tiempo. La única persona que queda tardará 2 unidades de tiempo en llegar al destino 
y luego el ascensor tardará otras 2 unidades de tiempo en volver a la planta baja. 
Tiempo total empleado = 8 + 2 + 2 = 12
Entrada: arr[] = {5, 5, 4}, k = 3 
Salida: 10 
Todas las personas pueden subir al ascensor al mismo tiempo 
El tiempo necesario será 10 (5 + 5). 
 

Enfoque: ordene la array dada en orden decreciente de destino. Cree grupos de K (a partir del piso más alto), el costo de cada grupo será de 2 * (max(Elements in current group)) . La suma de todos los grupos será la respuesta.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the minimum time taken
// by the elevator when operating optimally
int minTime(int n, int k, int a[])
{
    // Sort in descending order
    sort(a, a + n, greater<int>());
    int minTime = 0;
 
    // Iterate through the groups
    for (int i = 0; i < n; i += k)
 
        // Update the time taken for each group
        minTime += (2 * a[i]);
 
    // Return the total time taken
    return minTime;
}
 
// Driver code
int main()
{
    int k = 2;
    int arr[] = { 2, 3, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << minTime(n, k, arr);
 
    return 0;
}

Java

// Java implementation of the approach
import java.util.*;
 
class GFG
{
// Function to return the minimum time taken
// by the elevator when operating optimally
public static int minTime(int n, int k, Integer a[])
{
    // Sort in descending order
    Arrays.sort(a , Collections.reverseOrder());
 
    int minTime = 0;
 
    // Iterate through the groups
    for (int i = 0; i < n; i += k)
 
        // Update the time taken for each group
        minTime += (2 * a[i]);
 
    // Return the total time taken
    return minTime;
}
 
// Driver code
public static void main(String args[])
{
    int k = 2;
    Integer arr[] = { 2, 3, 4 };
    int n = arr.length;
    System.out.println(minTime(n, k, arr));
}
}
 
// This code is contributed by Pushpesh Raj.

Python3

# Python3 implementation of the approach
 
# Function to return the minimum time taken
# by the elevator when operating optimally
def minTime(n, k, a) :
     
    # Sort in descending order
    a.sort(reverse = True);
     
    minTime = 0;
 
    # Iterate through the groups
    for i in range(0, n, k) :
 
        # Update the time taken for
        # each group
        minTime += (2 * a[i]);
 
    # Return the total time taken
    return minTime;
 
# Driver code
if __name__ == "__main__" :
     
    k = 2;
    arr = [ 2, 3, 4 ];
    n = len(arr) ;
    print(minTime(n, k, arr));
     
# This code is contributed by Ryuga

C#

// C# implementation of the approach
using System;
 
class GFG
{
 
// Function to return the minimum time taken
// by the elevator when operating optimally
static int minTime(int n, int k, int []a)
{
    // Sort in descending order
    int temp;
    for(int i = 0; i < n; i++)
    {
        for(int j = i + 1; j < n; j++)
        {
            if(a[i] < a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
 
 
    int minTime = 0;
 
    // Iterate through the groups
    for (int i = 0; i < n; i += k)
 
        // Update the time taken for each group
        minTime += (2 * a[i]);
 
    // Return the total time taken
    return minTime;
}
 
// Driver code
public static void Main(String []args)
{
    int k = 2;
    int []arr = { 2, 3, 4 };
    int n = arr.Length;
    Console.Write(minTime(n, k, arr));
}
}
 
// This code is contributed by Arnab Kundu

Javascript

<script>
 
// JavaScript implementation of the approach
 
// Function to return the minimum time taken
// by the elevator when operating optimally
function minTime(n , k , a)
{
    // Sort in descending order
    var temp;
    for(var i = 0; i < n; i++)
    {    
        for(var j = i + 1; j < n; j++)
        {
            if(a[i] < a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }   var minTime = 0;
 
    // Iterate through the groups
    for (var i = 0; i < n; i += k)
 
        // Update the time taken for each group
        minTime += (2 * a[i]);
 
    // Return the total time taken
    return minTime;
}
 
// Driver code
var k = 2;
var arr = [ 2, 3, 4 ];
var n = arr.length;
document.write(minTime(n, k, arr));
 
// This code is contributed by Amit Katiyar
 
</script>
Producción

12

Complejidad de tiempo: O(N * log(N))
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por Abdullah Aslam 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 *