Número máximo de cubos que se pueden llenar

Dada una array arr[] que consta de capacidades de N cubos, donde arr[i] denota la capacidad del i -ésimo cubo. Si la cantidad total de agua disponible es la suma de los índices de array ( indexación basada en 1 ), la tarea es encontrar la cantidad máxima de baldes que se pueden llenar con el agua disponible. El balde se considerará lleno si contiene al menos 1 litro.
 

Ejemplos:

Entrada: arr[] = {1, 5, 3, 4, 7, 9}
Salida: 4
Explicación:
Total de agua disponible = Suma de los índices de array de arr[] = 1 + 2 + 3 + 4 + 5 = 15.
Ordenar los array en orden ascendente modifica la array a {1, 3, 4, 5, 7, 9}.
Llene el balde con capacidad 1, luego . Ahora, agua disponible = 14. 
Llena el balde con capacidad 3 . Ahora, agua disponible = 11.
Llenar balde con capacidad 4. Ahora, agua disponible = 7.
Llenar balde con capacidad 5. Ahora, agua disponible = 2. En este caso se llena con más de 1 litro por lo que también se considera este balde .
Por lo tanto, el total de baldes que se pueden llenar por completo con agua es 4.

Entrada: arr[] = {2, 5, 8, 3, 2, 10, 8}
Salida: 5

 

Enfoque: El problema dado se puede resolver con avaricia . Siga los pasos a continuación para resolver el problema dado:

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 maximum number
// of buckets that can be filled with
// the amount of water available
int getBuckets(int arr[], int N)
{
    // Find the total available water
    int availableWater = N * (N - 1) / 2;
 
    // Sort the array in ascending order
    sort(arr, arr + N);
 
    int i = 0, sum = 0;
 
    // Check if bucket can be
    // filled with available water
    while (sum <= availableWater) {
        sum += arr[i];
        i++;
    }
 
    // Print count of buckets
    cout << i - 1;
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 5, 3, 4, 7, 9 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    getBuckets(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
public class GFG
{
   
  // Function to find the maximum number
  // of buckets that can be filled with
  // the amount of water available
  static void getBuckets(int[] arr, int N)
  {
    // Find the total available water
    int availableWater = N * (N - 1) / 2;
 
    // Sort the array in ascending order
    Arrays.sort(arr);
 
    int i = 0, sum = 0;
 
    // Check if bucket can be
    // filled with available water
    while (sum <= availableWater) {
      sum += arr[i];
      i++;
    }
 
    // Print count of buckets
    System.out.println(i - 1);
  }
 
  // Driver code
  public static void main(String[] args)
  {
    int[] arr = { 1, 5, 3, 4, 7, 9 };
    int N = arr.length;
 
    getBuckets(arr, N);
  }
}
 
// This code is contributed by divyesh072019.

Python3

# Python3 program for the above approach
 
# Function to find the maximum number
# of buckets that can be filled with
# the amount of water available
def getBuckets(arr, N) :
 
    # Find the total available water
    availableWater = N * (N - 1) // 2
 
    # Sort the array in ascending order
    arr.sort()
 
    i, Sum = 0, 0
 
    # Check if bucket can be
    # filled with available water
    while (Sum <= availableWater) :
        Sum += arr[i]
        i += 1
 
    # Print count of buckets
    print(i - 1, end = "")
 
arr = [ 1, 5, 3, 4, 7, 9 ]
N = len(arr)
 
getBuckets(arr, N);
 
# This code is contributed by divyeshrabadiya07.

C#

// C# program to implement
// the above approach
using System;
using System.Collections.Generic;
using System.Linq;
 
class GFG
{
   
  // Function to find the maximum number
  // of buckets that can be filled with
  // the amount of water available
  static void getBuckets(int[] arr, int N)
  {
     
    // Find the total available water
    int availableWater = N * (N - 1) / 2;
 
    // Sort the array in ascending order
    Array.Sort(arr);
    int i = 0, sum = 0;
 
    // Check if bucket can be
    // filled with available water
    while (sum <= availableWater)
    {
      sum += arr[i];
      i++;
    }
 
    // Print count of buckets
    Console.Write(i - 1);
  }
 
// Driver Code
public static void Main(String[] args)
{
    int[] arr = { 1, 5, 3, 4, 7, 9 };
    int N = arr.Length;
 
    getBuckets(arr, N);
}
}
 
// This code is contributed by splevel62.

Javascript

<script>
 
    // Javascript program to implement
    // the above approach
     
    // Function to find the maximum number
    // of buckets that can be filled with
    // the amount of water available
    function getBuckets(arr, N)
    {
 
      // Find the total available water
      let availableWater = N * (N - 1) / 2;
 
      // Sort the array in ascending order
      arr.sort(function(a, b){return a - b});
      let i = 0, sum = 0;
 
      // Check if bucket can be
      // filled with available water
      while (sum <= availableWater)
      {
        sum += arr[i];
        i++;
      }
 
      // Print count of buckets
      document.write(i - 1);
    }
     
    let arr = [ 1, 5, 3, 4, 7, 9 ];
    let N = arr.length;
  
    getBuckets(arr, N);
   
</script>
Producción: 

4

 

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

Publicación traducida automáticamente

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