Dada una array arr[] de N enteros, la tarea es encontrar un elemento x de la array tal que |arr[0] – x| + |array[1] – x| + |array[2] – x| + … + |array[n – 1] – x| se minimiza, luego imprima la suma minimizada.
Ejemplos:
Entrada: arr[] = {1, 3, 9, 3, 6}
Salida: 11
La solución óptima es elegir x = 3, lo que produce la suma
|1 – 3| + |3 – 3| + |9 – 3| + |3 – 3| + |6 – 3| = 2 + 0 + 6 + 0 + 3 = 11
Entrada: arr[] = {1, 2, 3, 4}
Salida: 4
Una solución simple es iterar a través de cada elemento y verificar si da una solución óptima o no. La complejidad temporal de esta solución es O(n*n)
Un enfoque eficiente: es elegir siempre x como la mediana de la array. Si n es par y hay dos medianas , ambas medianas son opciones óptimas. La complejidad de tiempo para el enfoque es O(n * log(n)) porque la array deberá ordenarse para encontrar la mediana. Calcule e imprima la suma minimizada cuando se encuentra x (mediana de la array).
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 minimized sum int minSum(int arr[], int n) { // Sort the array sort(arr, arr + n); // Median of the array int x = arr[n / 2]; int sum = 0; // Calculate the minimized sum for (int i = 0; i < n; i++) sum += abs(arr[i] - x); // Return the required sum return sum; } // Driver code int main() { int arr[] = { 1, 3, 9, 3, 6 }; int n = sizeof(arr) / sizeof(arr[0]); cout << minSum(arr, n); return 0; }
Java
// Java implementation of the approach import java.util.*; class GFG { // Function to return the minimized sum static int minSum(int arr[], int n) { // Sort the array Arrays.sort(arr); // Median of the array int x = arr[(int)n / 2]; int sum = 0; // Calculate the minimized sum for (int i = 0; i < n; i++) sum += Math.abs(arr[i] - x); // Return the required sum return sum; } // Driver code public static void main(String args[]) { int arr[] = { 1, 3, 9, 3, 6 }; int n = arr.length; System.out.println(minSum(arr, n)); } } // This code is contribute by // Surendra_Gangwar
Python3
# Python3 implementation of the approach # Function to return the minimized sum def minSum(arr, n) : # Sort the array arr.sort(); # Median of the array x = arr[n // 2]; sum = 0; # Calculate the minimized sum for i in range(n) : sum += abs(arr[i] - x); # Return the required sum return sum; # Driver code if __name__ == "__main__" : arr = [ 1, 3, 9, 3, 6 ]; n = len(arr) print(minSum(arr, n)); # This code is contributed by Ryuga
C#
// C# implementation of the approach using System; class GFG { // Function to return the minimized sum static int minSum(int []arr, int n) { // Sort the array Array.Sort(arr); // Median of the array int x = arr[(int)(n / 2)]; int sum = 0; // Calculate the minimized sum for (int i = 0; i < n; i++) sum += Math.Abs(arr[i] - x); // Return the required sum return sum; } // Driver code static void Main() { int []arr = { 1, 3, 9, 3, 6 }; int n = arr.Length; Console.WriteLine(minSum(arr, n)); } } // This code is contributed by mits
Javascript
<script> //Javascript implementation of the approach // Function to return the minimized sum function minSum(arr, n) { // Sort the array arr.sort(); // Median of the array let x = arr[Math.floor(n / 2)]; let sum = 0; // Calculate the minimized sum for (let i = 0; i < n; i++) sum += Math.abs(arr[i] - x); // Return the required sum return sum; } // Driver code let arr = [ 1, 3, 9, 3, 6 ]; let n = arr.length; document.write(minSum(arr, n)); // This code is contributed by Mayank Tyagi </script>
11
La complejidad temporal de la solución anterior es O(n Log n). Podemos optimizarlo aún más para que funcione en O(n) usando un algoritmo de tiempo lineal para encontrar el k-ésimo elemento más grande .
Publicación traducida automáticamente
Artículo escrito por vashu_1997 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA