Dada una array arr[] que contiene N enteros, la tarea es encontrar el máximo de todos los elementos mínimos después de N-1 operaciones de eliminación. En una operación, elimine el elemento más pequeño de la array y réstelo de todos los elementos restantes.
Ejemplos:
Entrada: arr[] = {-1, -2, 4, 3, 5}
Salida: 4
Explicación: Las siguientes son las operaciones realizadas:
Operación 1: Quitar -2 y restarlo del restante. Ahora la array arr[] se convierte en {1, 6, 5, 7}. elemento mínimo = 1, elemento mínimo máx = 1.
Operación 2: quitar 1 y restarlo del restante. Ahora la array arr[] se convierte en {5, 4, 6}. mínimo elemento =4, max mínimo elemento = 4.
Operación 3: Quitar 4 y restarlo del restante. Ahora arr[] se convierte en {1, 2}. elemento mínimo = 1 elemento mínimo máximo = 4 hasta ahora.
Operación 4: Quitar 1 y restarlo del restante. Ahora arr[] se convierte en {1}. elemento mínimo = 1, elemento mínimo máximo = 4 hasta ahora
Por lo tanto, el elemento mínimo máximo es 4.Entrada: arr[] = {-3, -1, -6, -7}
Salida: 3
Enfoque ingenuo: elimine el elemento mínimo de la array y realice la resta de los elementos restantes y siga rastreando el máximo de un mínimo de la array en cada operación mientras el tamaño de la array no sea igual a 0.
Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)
Enfoque eficiente: el enfoque anterior se puede optimizar utilizando el enfoque codicioso . Esto se puede derivar matemáticamente ya que el elemento mínimo debe eliminarse cada vez y, por lo tanto, es independiente del orden de los elementos en la array. Por lo tanto, la array debe ordenarse. Siga la observación a continuación, para resolver el problema:
Dado que el elemento Mínimo debe eliminarse en cada operación. Considere que la array después de clasificar en orden creciente es {a1, a2, a3, a4, a5, …}
Inicialmente a1 es el mínimo y después de eliminarlo, la array se convierte en {a2-a1, a3-a1, a4-a1, a5- a1, …}
Ahora a2-a1 es el mínimo y después de eliminarlo, la array se convierte en {a3-a1-(a2-a1), a4-a1-(a2-a1), …} que es igual a {a3-a2 , a4-a2, a5-a2, …}
Ahora a3-a2 es el mínimo y continúa así…
Entonces, res = max(a1, ∑(i=0 to (N-1)) (ai+1 -ai) )
Por lo tanto, el resultado final será la diferencia máxima de dos elementos consecutivos, como se ve en la prueba anterior. Siga los pasos a continuación para resolver el problema:
- Cree una variable max_value para almacenar la respuesta final e inicialícela con arr[0] .
- Ordene la array arr[] en orden ascendente.
- Ejecute un ciclo de i=0 a i<(N-1) , y en cada iteración:
- Lleve un registro del valor máximo o mínimo (es decir, la diferencia arr[i + 1] – arr[i] ) en cada iteración. Entonces, haga max_value , máximo de max_value y (arr[i+1] – arr[i]) .
- Devuelve max_value como respuesta final.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ code for the above approach #include <bits/stdc++.h> using namespace std; // Function to find maximum of minimum value // of the array in the array // in each operation int maxOfAllMins(int arr[], int n) { // If no operations are done int max_value = arr[0]; // Sort the array arr in ascending order sort(arr, arr + n); for (int i = 0; i < n - 1; i++) { max_value = max(max_value, arr[i + 1] - arr[i]); } return max_value; } // Driver code int main() { int arr[] = { -1, -2, 4, 3, 5 }; int N = sizeof(arr) / sizeof(arr[0]); cout << maxOfAllMins(arr, N); return 0; }
Java
// Java program for above approach import java.util.*; public class GFG { // Function to find maximum of minimum value // of the array in the array // in each operation static int maxOfAllMins(int[] arr, int n) { // If no operations are done int max_value = arr[0]; // Sort the array arr in ascending order Arrays.sort(arr); for (int i = 0; i < n - 1; i++) { max_value = Math.max(max_value, arr[i + 1] - arr[i]); } return max_value; } // Driver code public static void main(String args[]) { int[] arr = { -1, -2, 4, 3, 5 }; int N = arr.length; System.out.println(maxOfAllMins(arr, N)); } } // This code is contributed by Samim Hossain Mondal.
Python3
# python3 code for the above approach # Function to find maximum of minimum value # of the array in the array # in each operation def maxOfAllMins(arr, n): # If no operations are done max_value = arr[0] # Sort the array arr in ascending order arr.sort() for i in range(0, n-1): max_value = max(max_value, arr[i + 1] - arr[i]) return max_value # Driver code if __name__ == "__main__": arr = [-1, -2, 4, 3, 5] N = len(arr) print(maxOfAllMins(arr, N)) # This code is contributed by rakeshsahni
C#
// C# code for the above approach using System; class GFG { // Function to find maximum of minimum value // of the array in the array // in each operation static int maxOfAllMins(int[] arr, int n) { // If no operations are done int max_value = arr[0]; // Sort the array arr in ascending order Array.Sort(arr); for (int i = 0; i < n - 1; i++) { max_value = Math.Max(max_value, arr[i + 1] - arr[i]); } return max_value; } // Driver code public static void Main() { int[] arr = { -1, -2, 4, 3, 5 }; int N = arr.Length; Console.WriteLine(maxOfAllMins(arr, N)); } } // This code is contributed by ukasp.
Javascript
<script> // Javascript code for the above approach // Function to find maximum of minimum value // of the array in the array // in each operation function maxOfAllMins(arr, n) { // If no operations are done let max_value = arr[0]; // Sort the array arr in ascending order arr.sort((a, b) => a - b); for (let i = 0; i < n - 1; i++) { max_value = Math.max(max_value, arr[i + 1] - arr[i]); } return max_value; } // Driver code let arr = [ -1, -2, 4, 3, 5 ]; let N = arr.length document.write(maxOfAllMins(arr, N)); // This code is contributed by gfgking. </script>
4
Complejidad temporal: O(NlogN)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por lokeshpotta20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA