Dada una array arr[] de N enteros, la tarea es encontrar la diferencia mínima de 0 después de sumar o restar cualquier elemento de la array.
Ejemplos:
Entrada: N = 4, arr[] = {1, 2, 1, 3}
Salida: 1
Explicación: Sume 1 y 2 con 0 y reste 1 y 3.
Así que suma total = (1 + 2 – 1 – 3) = -1. la diferencia es 1Entrada: N = 3, arr[] = {3, 3, 3}
Salida: 3
Explicación: No importa qué orden se elija, la diferencia mínima posible es 3.Entrada: N = 1, arr[] = {100}
Salida: 100
Explicación: Solo hay un elemento, por lo que la diferencia será 100
Planteamiento: El problema se enfoca en formar un Árbol Exponencial Recursivo donde hay dos posibilidades cada vez. Uno para sumar elemento y otro para restarlo. Siga los pasos dados:
- Cree una función recursiva minDist que tenga argumentos en la array original arr , iterando el índice r a partir de 0 , la longitud de la array N y el número entero para calcular la distancia actual k .
- Si r se vuelve igual a n significa que todos los elementos se recorren, por lo que devuelve la distancia actual k .
- De lo contrario, devuelve el mínimo de minDist(arr, r+1, N, k+arr[r]) y minDist(arr, r+1, N, k-arr[r]) .
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ code to implement above approach #include <bits/stdc++.h> using namespace std; // Function to find the minimum difference long long minDist(int* arr, int r, int N, long long k) { if (r == N) return k; else return min(abs(minDist(arr, r + 1, N, k + arr[r])), abs(minDist(arr, r + 1, N, k - arr[r]))); } // Driver code int main() { int arr[] = { 1, 2, 1, 3 }; int N = sizeof(arr) / sizeof(arr[0]); cout << minDist(arr, 0, N, 0); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Function to find the minimum difference static long minDist(int arr[ ], int r, int N, long k) { if (r == N) return k; else return Math.min(Math.abs(minDist(arr, r + 1, N, k + arr[r])), Math.abs(minDist(arr, r + 1, N, k - arr[r]))); } public static void main (String[] args) { int arr[] = { 1, 2, 1, 3 }; int N = arr.length; System.out.print(minDist(arr, 0, N, 0)); } } // This code is contributed by hrithikgarg03188
Python3
# Python code to implement above approach # Function to find the minimum difference def minDist(arr, r, N, k): if (r == N): return k else: return min(abs(minDist(arr, r + 1, N, k + arr[r])), abs(minDist(arr, r + 1, N, k - arr[r]))) # Driver code arr = [1, 2, 1, 3] N = len(arr) print(minDist(arr, 0, N, 0)) # This code is contributed by gfgking
C#
// C# program for the above approach using System; class GFG { // Function to find the minimum difference static long minDist(int[] arr, int r, int N, long k) { if (r == N) return k; else return Math.Min(Math.Abs(minDist(arr, r + 1, N, k + arr[r])), Math.Abs(minDist(arr, r + 1, N, k - arr[r]))); } public static void Main() { int[] arr = { 1, 2, 1, 3 }; int N = arr.Length; Console.Write(minDist(arr, 0, N, 0)); } } // This code is contributed by Samim Hossain Mondal.
Javascript
<script> // JavaScript code to implement above approach // Function to find the minimum difference const minDist = (arr, r, N, k) => { if (r == N) return k; else return Math.min(Math.abs(minDist(arr, r + 1, N, k + arr[r])), Math.abs(minDist(arr, r + 1, N, k - arr[r]))); } // Driver code let arr = [1, 2, 1, 3]; let N = arr.length; document.write(minDist(arr, 0, N, 0)); // This code is contributed by rakeshsahni </script>
1
Complejidad temporal: O(2 N )
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por prophet1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA