Minimice el recuento de subconjuntos con una diferencia entre el elemento máximo y mínimo que no supere K

Dada una array arr[ ] y un entero K , la tarea es dividir la array dada en un número mínimo de subconjuntos que tengan la diferencia entre el elemento máximo y mínimo ≤ K .

Ejemplos:

Entrada: arr[ ] = {1, 3, 7, 9, 10}, K = 3
Salida: 2
Explicación:
Uno de los posibles subconjuntos de arr[] son ​​{1, 3} y {7, 9, 10} donde la diferencia entre el elemento máximo y mínimo no es mayor que K, es decir, 3.

Entrada: arr[ ] = {1, 10, 8, 3, 9}, K =3
Salida: 2.

Enfoque: siga los pasos a continuación para resolver el problema:

  1. Ordene la array en orden ascendente.
  2. Itere sobre la array, configurando currMin como el primer elemento de la array y siga actualizando currMax con los elementos recorridos.
  3. Si en cualquier índice, la diferencia entre currMax y currMin excede K, incremente la respuesta en 1 y establezca currMax y currMin en arr[i].
  4. Finalmente, devuelva la respuesta .

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

C++

// C++ Program to implement
// above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum count
// of subsets of required type
int findCount(int arr[], int N, int K)
{
    sort(arr, arr + N);
 
    // Stores the result
    int result = 1;
 
    // Store the maximum and minimum
      // element of the current subset
    int cur_max = arr[0];
    int cur_min = arr[0];
   
    for (int i = 1; i < N; i++) {
       
        // Update current maximum
        cur_max = arr[i];
       
        // If difference exceeds K
        if (cur_max - cur_min > K) {
           
            // Update count
            result++;
 
            // Update maximum and minimum
            // to the current subset
            cur_max = arr[i];
            cur_min = arr[i];
        }
    }
   
    return result;
}
 
// Driver Code
int main()
{
    int arr[] = { 1,10, 8, 3, 9 };
    int K = 3;
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << findCount(arr, N, K);
 
    return 0;
}

Java

// Java program to implement
// above approach
import java.util.*;
 
class GFG{
 
// Function to find the minimum count
// of subsets of required type
static int findCount(int arr[], int N, int K)
{
    Arrays.sort(arr);
 
    // Stores the result
    int result = 1;
 
    // Store the maximum and minimum
    // element of the current subset
    int cur_max = arr[0];
    int cur_min = arr[0];
 
    for(int i = 1; i < N; i++)
    {
         
        // Update current maximum
        cur_max = arr[i];
     
        // If difference exceeds K
        if (cur_max - cur_min > K)
        {
         
            // Update count
            result++;
 
            // Update maximum and minimum
            // to the current subset
            cur_max = arr[i];
            cur_min = arr[i];
        }
    }
    return result;
}
 
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 1, 10, 8, 3, 9 };
    int K = 3;
    int N = arr.length;
     
    System.out.print(findCount(arr, N, K));
}
}
 
// This code is contributed by amal kumar choubey

Python3

# Python3 program to implement
# the above approach
 
# Function to find the minimum count
# of subsets of required type
def findCount(arr, N, K):
 
    arr.sort()
 
    # Stores the result
    result = 1
 
    # Store the maximum and minimum
    # element of the current subset
    cur_max = arr[0]
    cur_min = arr[0]
 
    for i in range(1, N):
 
        # Update current maximum
        cur_max = arr[i]
 
        # If difference exceeds K
        if(cur_max - cur_min > K):
 
            # Update count
            result += 1
 
            # Update maximum and minimum
            # to the current subset
            cur_max = arr[i]
            cur_min = arr[i]
 
    return result
 
# Driver Code
arr = [ 1, 10, 8, 3, 9 ]
K = 3
N = len(arr)
 
# Function call
print(findCount(arr, N, K))
 
# This code is contributed by Shivam Singh

C#

// C# program to implement
// above approach
using System;
class GFG{
 
// Function to find the minimum count
// of subsets of required type
static int findCount(int []arr,
                     int N, int K)
{
    Array.Sort(arr);
 
    // Stores the result
    int result = 1;
 
    // Store the maximum and minimum
    // element of the current subset
    int cur_max = arr[0];
    int cur_min = arr[0];
 
    for(int i = 1; i < N; i++)
    {
         
        // Update current maximum
        cur_max = arr[i];
     
        // If difference exceeds K
        if (cur_max - cur_min > K)
        {
         
            // Update count
            result++;
 
            // Update maximum and minimum
            // to the current subset
            cur_max = arr[i];
            cur_min = arr[i];
        }
    }
    return result;
}
 
// Driver Code
public static void Main(String[] args)
{
    int []arr = { 1, 10, 8, 3, 9 };
    int K = 3;
    int N = arr.Length;
     
    Console.Write(findCount(arr, N, K));
}
}
 
// This code is contributed by gauravrajput1

Javascript

<script>
// javascript program for the
// above approach
 
// Function to find the minimum count
// of subsets of required type
function findCount(arr, N, K)
{
    arr.sort();
  
    // Stores the result
    let result = 1;
  
    // Store the maximum and minimum
    // element of the current subset
    let cur_max = arr[0];
    let cur_min = arr[0];
  
    for(let i = 1; i < N; i++)
    {
          
        // Update current maximum
        cur_max = arr[i];
      
        // If difference exceeds K
        if (cur_max - cur_min > K)
        {
          
            // Update count
            result++;
  
            // Update maximum and minimum
            // to the current subset
            cur_max = arr[i];
            cur_min = arr[i];
        }
    }
    return result;
}
  
// Driver Code
 
     let arr = [ 1, 10, 8, 3, 9 ];
    let K = 3;
    let N = arr.length;
      
    document.write(findCount(arr, N, K));
  
 // This code is contributed by target_2.
</script>
Producción: 

2

 

Complejidad de Tiempo: O(NLog(N))
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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