Dada una array arr[] que consiste en N enteros positivos y un entero K , la tarea es minimizar la diferencia entre el elemento máximo y mínimo en la array dada después de eliminar exactamente K elementos.
Ejemplos:
Entrada: arr[] = {5, 1, 6, 7, 12, 10}, K = 3
Salida: 2
Explicación:
Elimina los elementos 12, 10 y 1 de la array dada.
La array se modifica a {5, 6, 7}.
La diferencia entre el elemento mínimo y máximo es 7 – 5 = 2.Entrada: arr[] = {14, 5, 61, 10, 21, 12, 54}, K = 4
Salida: 4
Explicación:
Elimina los elementos 61, 54, 5 y 21 de la array dada.
La array se modifica a {14, 10, 12}.
La diferencia entre el elemento mínimo y máximo es 14 – 10 = 4.
Enfoque: la idea para resolver el problema dado es que la diferencia se minimizará eliminando el elemento mínimo en una array o el elemento máximo en la array . Siga los pasos a continuación para resolver el problema:
- Ordene la array arr[] en orden ascendente .
- Inicialice las variables izquierda = 0 y derecha = (N – 1) .
- Iterar por K veces y cambiar el máximo o mínimo a 0 de acuerdo con la siguiente condición:
- Si arr[right – 1] – arr[left] < arr[right] – arr[left + 1] , cambie arr[right] a 0 y disminuya el puntero derecho en 1 .
- De lo contrario, cambie arr[left] como 0 e incremente el puntero izquierdo en 1 .
- Después de los pasos anteriores, la diferencia entre los elementos del índice izquierdo y derecho es la diferencia mínima requerida.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> #include <iostream> using namespace std; // Function to minimize the difference // of the maximum and minimum array // elements by removing K elements void minimumRange(int arr[], int N, int K) { // Base Condition if (K >= N) { cout << 0; return; } // Sort the array sort(arr, arr + N); // Initialize left and right pointers int left = 0, right = N - 1, i; // Iterate for K times for (i = 0; i < K; i++) { // Removing right element // to reduce the difference if (arr[right - 1] - arr[left] < arr[right] - arr[left + 1]) right--; // Removing the left element // to reduce the difference else left++; } // Print the minimum difference cout << arr[right] - arr[left]; } // Driver Code int main() { int arr[] = { 5, 10, 12, 14, 21, 54, 61 }; int N = sizeof(arr) / sizeof(arr[0]); int K = 4; // Function Call minimumRange(arr, N, K); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to minimize the difference // of the maximum and minimum array // elements by removing K elements static void minimumRange(int arr[], int N, int K) { // Base Condition if (K >= N) { System.out.print(0); return; } // Sort the array Arrays.sort(arr); // Initialize left and right pointers int left = 0, right = N - 1, i; // Iterate for K times for(i = 0; i < K; i++) { // Removing right element // to reduce the difference if (arr[right - 1] - arr[left] < arr[right] - arr[left + 1]) right--; // Removing the left element // to reduce the difference else left++; } // Print the minimum difference System.out.print(arr[right] - arr[left]); } // Driver Code public static void main(String[] args) { int arr[] = { 5, 10, 12, 14, 21, 54, 61 }; int N = arr.length; int K = 4; // Function Call minimumRange(arr, N, K); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program for the above approach # Function to minimize the difference # of the maximum and minimum array # elements by removing K elements def minimumRange(arr, N, K) : # Base Condition if (K >= N) : print(0, end = ''); return; # Sort the array arr.sort(); # Initialize left and right pointers left = 0; right = N - 1; # Iterate for K times for i in range(K) : # Removing right element # to reduce the difference if (arr[right - 1] - arr[left] < arr[right] - arr[left + 1]) : right -= 1; # Removing the left element # to reduce the difference else : left += 1; # Print the minimum difference print(arr[right] - arr[left], end = ''); # Driver Code if __name__ == "__main__" : arr = [ 5, 10, 12, 14, 21, 54, 61 ]; N = len(arr); K = 4; # Function Call minimumRange(arr, N, K); # This code is contributed by AnkitRai01
C#
// C# program for the above approach using System; class GFG{ // Function to minimize the difference // of the maximum and minimum array // elements by removing K elements static void minimumRange(int []arr, int N, int K) { // Base Condition if (K >= N) { Console.Write(0); return; } // Sort the array Array.Sort(arr); // Initialize left and right pointers int left = 0, right = N - 1, i; // Iterate for K times for(i = 0; i < K; i++) { // Removing right element // to reduce the difference if (arr[right - 1] - arr[left] < arr[right] - arr[left + 1]) right--; // Removing the left element // to reduce the difference else left++; } // Print the minimum difference Console.Write(arr[right] - arr[left]); } // Driver Code public static void Main(String[] args) { int []arr = { 5, 10, 12, 14, 21, 54, 61 }; int N = arr.Length; int K = 4; // Function Call minimumRange(arr, N, K); } } // This code is contributed by 29AjayKumar
Javascript
<script> // JavaScript program for the above approach // Function to minimize the difference // of the maximum and minimum array // elements by removing K elements function minimumRange(arr, N, K) { // Base Condition if (K >= N) { document.write( 0); return; } // Sort the array arr.sort((a,b)=> a-b); // Initialize left and right pointers var left = 0, right = N - 1, i; // Iterate for K times for (i = 0; i < K; i++) { // Removing right element // to reduce the difference if (arr[right - 1] - arr[left] < arr[right] - arr[left + 1]) right--; // Removing the left element // to reduce the difference else left++; } // Print the minimum difference document.write( arr[right] - arr[left]); } // Driver Code var arr = [5, 10, 12, 14, 21, 54, 61]; var N = arr.length; var K = 4; // Function Call minimumRange(arr, N, K); </script>
4
Complejidad de tiempo: O(N*log N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por ManikantaBandla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA