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:
- Ordene la array en orden ascendente.
- Itere sobre la array, configurando currMin como el primer elemento de la array y siga actualizando currMax con los elementos recorridos.
- 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].
- 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>
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