Dada una array arr[] de N elementos, debe realizar la siguiente operación en la array dada hasta que la array se reduzca a un solo elemento,
- Elige dos índices i y j tales que i != j .
- Reemplace arr[i] con arr[i] – arr[j] y elimine arr[j] de la array.
La tarea es maximizar e imprimir el valor del último elemento restante de la array.
Ejemplos:
Entrada: arr[] = {20, 3, -15, 7}
Salida: 45
Paso 1: Podemos eliminar 7 y reemplazar -15 con -22.
paso 2: Podemos eliminar 3 y reemplazar -22 con -25.
paso 3: podemos eliminar -25 y reemplazar 20 con 45.
Entonces 45 es el valor máximo que podemos obtener.
Entrada: arr[] = {5, 4, 6, 2}
Salida: 13
Enfoque: Para maximizar el valor del último elemento restante, hay tres casos:
- La array tiene números negativos y positivos: primero restaremos todos los números positivos (excepto uno) de los números negativos. Después de esto, solo nos quedará un solo número positivo y un solo número negativo. Ahora, restaremos ese número negativo del positivo, lo que finalmente dará como resultado un número positivo. Entonces, en este caso, el resultado es la suma de los valores absolutos de los elementos de la array.
- La array contiene solo números positivos: primero encontramos el número más pequeño y luego le restamos todos los números positivos excepto un número positivo. Después de esto, obtenemos solo un número positivo y un número negativo, ahora restaremos el número negativo de ese número positivo, lo que finalmente dará como resultado un número positivo. Aquí podemos observar que el
número más pequeño se ha desvanecido y también el valor básicamente se elimina del siguiente elemento mayor, que es diferente del caso 1. Entonces, en este caso, el resultado es la suma de los valores absolutos de los elementos de la array: 2 * elemento mínimo . - La array contiene solo números negativos: primero encontramos el número más grande y luego restamos todos los números negativos excepto un número negativo. Después de esto, obtenemos solo un número negativo y un número positivo, ahora restaremos el número negativo del positivo, lo que dará como resultado un número positivo. Aquí podemos observar que el número más grande se ha desvanecido y también el valor básicamente se elimina del siguiente elemento mayor que es diferente del caso 1. Entonces, en este caso, el resultado es la suma de los valores absolutos de los elementos de la array: 2 * absoluto de elemento más grande. Aquí tomamos el mayor como absoluto del mayor es el menor en el caso de un número negativo.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the maximized value int find_maximum_value(int a[], int n) { int sum = 0; int minimum = INT_MAX; int pos = 0, neg = 0; for (int i = 0; i < n; i++) { // Overall minimum absolute value // of some element from the array minimum = min(minimum, abs(a[i])); // Add all absolute values sum += abs(a[i]); // Count positive and negative elements if (a[i] >= 0) pos += 1; else neg += 1; } // Both positive and negative // values are present if (pos > 0 && neg > 0) return sum; // Only positive or negative // values are present return (sum - 2 * minimum); } // Driver code int main() { int a[] = { 5, 4, 6, 2 }; int n = sizeof(a) / sizeof(a[0]); cout << find_maximum_value(a, n); return 0; }
Java
// Java implementation of the approach import java.io.*; class GFG { // Function to return the maximized value static int find_maximum_value(int a[], int n) { int sum = 0; int minimum = Integer.MAX_VALUE; int pos = 0, neg = 0; for (int i = 0; i < n; i++) { // Overall minimum absolute value // of some element from the array minimum = Math.min(minimum, Math.abs(a[i])); // Add all absolute values sum += Math.abs(a[i]); // Count positive and negative elements if (a[i] >= 0) pos += 1; else neg += 1; } // Both positive and negative // values are present if (pos > 0 && neg > 0) return sum; // Only positive or negative // values are present return (sum - 2 * minimum); } // Driver code public static void main (String[] args) { int []a = { 5, 4, 6, 2 }; int n = a.length; System.out.println(find_maximum_value(a, n)); } } // This code is contributed by ajit
Python
# Python3 implementation of the approach # Function to return the maximized value def find_maximum_value(a, n): sum = 0 minimum = 10**9 pos = 0 neg = 0 for i in range(n): # Overall minimum absolute value # of some element from the array minimum = min(minimum, abs(a[i])) # Add all absolute values sum += abs(a[i]) # Count positive and negative elements if (a[i] >= 0): pos += 1 else: neg += 1 # Both positive and negative # values are present if (pos > 0 and neg > 0): return sum # Only positive or negative # values are present return (sum - 2 * minimum) # Driver code a= [5, 4, 6, 2] n = len(a) print(find_maximum_value(a, n)) # This code is contributed by mohit kumar 29
C#
// C# implementation of the approach using System; class GFG { // Function to return the maximized value static int find_maximum_value(int []a, int n) { int sum = 0; int minimum = int.MaxValue; int pos = 0, neg = 0; for (int i = 0; i < n; i++) { // Overall minimum absolute value // of some element from the array minimum = Math.Min(minimum, Math.Abs(a[i])); // Add all absolute values sum += Math.Abs(a[i]); // Count positive and negative elements if (a[i] >= 0) pos += 1; else neg += 1; } // Both positive and negative // values are present if (pos > 0 && neg > 0) return sum; // Only positive or negative // values are present return (sum - 2 * minimum); } // Driver code static public void Main () { int []a = { 5, 4, 6, 2 }; int n = a.Length; Console.WriteLine(find_maximum_value(a, n)); } } // This code is contributed by AnkitRai01
Javascript
<script> // javascript implementation of the approach // Function to return the maximized value function find_maximum_value(a , n) { var sum = 0; var minimum = Number.MAX_VALUE; var pos = 0, neg = 0; for (i = 0; i < n; i++) { // Overall minimum absolute value // of some element from the array minimum = Math.min(minimum, Math.abs(a[i])); // Add all absolute values sum += Math.abs(a[i]); // Count positive and negative elements if (a[i] >= 0) pos += 1; else neg += 1; } // Both positive and negative // values are present if (pos > 0 && neg > 0) return sum; // Only positive or negative // values are present return (sum - 2 * minimum); } // Driver code var a = [ 5, 4, 6, 2 ]; var n = a.length; document.write(find_maximum_value(a, n)); // This code is contributed by todaysgaurav </script>
Producción:
13
Complejidad de tiempo: O(N)
Espacio Auxiliar: O(1)