Costo requerido para vaciar una array dada mediante la eliminación repetida del máximo obtenido por operaciones dadas

Dada una array arr[] que consta de N enteros, la tarea es encontrar el costo de eliminar todos los elementos de la array después de realizar las siguientes operaciones en el orden especificado cualquier cantidad de veces:

Ejemplos:

Entrada: arr[] = {1, 6, 7, 4, 2, 5, 3}
Salida: 16
Explicación: 
Paso 1: Elemento máximo actual = 7. Eliminar 7 y reducir cada elemento en 1 modifica la array a {0, 5, 3, 1, 4, 2}. Costo = 7. 
Paso 2: Elemento máximo actual = 5. Eliminar 5 y reducir cada elemento en 1 modifica la array a {2, 0, 3, 1}. Costo = 7 + 5 = 12. 
Paso 3: Máximo actual = 3. Eliminar 3 y reducir cada elemento en 1 modifica la array a {1, 1}. Costo = 12 + 3 = 15 
Paso 4: Costo final obtenido = 15 + 1 = 16

Entrada: arr[] = {6, 4, 6, 1}
Salida: 13

Enfoque ingenuo: el enfoque más simple para resolver el problema es el siguiente:

  • Encuentre el máximo de la array dada
  • Agréguelo al costo después de eliminarlo de la array.
  • Una vez que se elimine el elemento máximo, reduzca todos los elementos restantes de la array en 1. Elimine todos los elementos reduciéndolos a 0.
  • Repita los pasos anteriores hasta que se eliminen todos los elementos de la array.
  • Finalmente, imprima el valor del costo .

Complejidad de tiempo: O(N 2 ), donde N es el tamaño de la array dada.
Espacio Auxiliar: O(1)

Enfoque eficiente: para optimizar el enfoque anterior, la idea es observar que cada i -ésimo elemento más grande de la array se agrega arr[i] – i veces al costo, donde i es el índice de cada elemento arr[i] . Siga los pasos a continuación para resolver el problema anterior:

  1. Ordena la array dada en orden decreciente .
  2. Recorra la array y agregue el valor arr[i] – i para que cada elemento de la array cueste si es mayor que 0 .
  3. Una vez completados los pasos anteriores, imprima el valor del costo .

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the total cost
// of removing all array elements
int findCost(int* a, int n)
{
    // Sort the array in descending order
    sort(a, a + n, greater<int>());
 
    // Stores the total cost
    int count = 0;
 
    for (int j = 0; j < n; j++) {
 
        // Contribution of i-th
        // greatest element to the cost
        int p = a[j] - j;
 
        // Remove the element
        a[j] = 0;
 
        // If negative
        if (p < 0) {
            p = 0;
            continue;
        }
 
        // Add to the final cost
        count += p;
    }
 
    // Return the cost
    return count;
}
 
// Driver Code
int main()
{
    // Given array arr[]
    int arr[] = { 1, 6, 7, 4, 2, 5, 3 };
 
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    cout << findCost(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
class GFG{
 
// Function to find the total cost
// of removing all array elements
static int findCost(Integer [] a, int n)
{
    // Sort the array in descending order
     Arrays.sort(a, Collections.reverseOrder());
 
    // Stores the total cost
    int count = 0;
 
    for (int j = 0; j < n; j++)
    {
        // Contribution of i-th
        // greatest element to the cost
        int p = a[j] - j;
 
        // Remove the element
        a[j] = 0;
 
        // If negative
        if (p < 0)
        {
            p = 0;
            continue;
        }
 
        // Add to the final cost
        count += p;
    }
 
    // Return the cost
    return count;
}
 
// Driver Code
public static void main(String[] args)
{
    // Given array arr[]
    Integer arr[] = {1, 6, 7,
                     4, 2, 5, 3};
 
    int N = arr.length;
 
    // Function Call
    System.out.print(findCost(arr, N));
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 program for the above approach
 
# Function to find the total cost
# of removing all array elements
def findCost(a, n):
 
    # Sort the array in descending order
    a.sort(reverse = True)
 
    # Stores the total cost
    count = 0
 
    for j in range(n):
 
        # Contribution of i-th
        # greatest element to the cost
        p = a[j] - j
 
        # Remove the element
        a[j] = 0
 
        # If negative
        if(p < 0):
            p = 0
            continue
 
        # Add to the final cost
        count += p
 
    # Return the cost
    return count
 
# Driver Code
 
# Given array arr[]
arr = [ 1, 6, 7, 4, 2, 5, 3 ]
 
N = len(arr)
 
# Function call
print(findCost(arr, N))
 
# This code is contributed by Shivam Singh

C#

// C# program for the above approach
using System;
class GFG{
 
// Function to find the total cost
// of removing all array elements
static int findCost(int []a, int n)
{
    // Sort the array in descending order
    Array.Sort(a);
    Array.Reverse(a);
 
    // Stores the total cost
    int count = 0;
 
    for (int j = 0; j < n; j++)
    {
        // Contribution of i-th
        // greatest element to the cost
        int p = a[j] - j;
 
        // Remove the element
        a[j] = 0;
 
        // If negative
        if (p < 0)
        {
            p = 0;
            continue;
        }
 
        // Add to the readonly cost
        count += p;
    }
 
    // Return the cost
    return count;
}
 
// Driver Code
public static void Main(String[] args)
{
    // Given array []arr
    int []arr = {1, 6, 7,
                 4, 2, 5, 3};
 
    int N = arr.Length;
 
    // Function Call
    Console.Write(findCost(arr, N));
}
}
 
// This code is contributed by shikhasingrajput

Javascript

<script>
      // JavaScript program for the above approach
      // Function to find the total cost
      // of removing all array elements
      function findCost(a, n) {
        // Sort the array in descending order
        a.sort((x, y) => y - x);
         
        // Stores the total cost
        var count = 0;
 
        for (var j = 0; j < n; j++) {
          // Contribution of i-th
          // greatest element to the cost
          var p = a[j] - j;
 
          // Remove the element
          a[j] = 0;
 
          // If negative
          if (p < 0) {
            p = 0;
            continue;
          }
          // Add to the final cost
          count += p;
        }
        // Return the cost
        return count;
      }
 
      // Driver Code
      // Given array arr[]
      var arr = [1, 6, 7, 4, 2, 5, 3];
      var N = arr.length;
      // Function Call
      document.write(findCost(arr, N));
    </script>
Producción: 

16

Complejidad de tiempo: O(NlogN), donde N es el tamaño de la array dada.
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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