Minimice la diferencia con 0 después de sumar o restar cualquier elemento de la array dada

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 1

Entrada: 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>
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *