Entero más pequeño que se insertará para tener sumas iguales

Dada una array de enteros positivos, encuentre el entero no negativo más pequeño (es decir, mayor que o igual a cero) que se puede colocar entre dos elementos cualesquiera de la array de manera que la suma de los elementos en la subarreferencia que ocurren antes sea igual a la suma de los elementos que aparecen en el subarreglo que le sigue, con el entero recién colocado incluido en cualquiera de los dos subarreglos.
Ejemplos: 
 

Entrada : arr = {3, 2, 1, 5, 7, 8} 
Salida : 4 
Explicación : El número más pequeño posible que podemos insertar es 4, en la posición 5 (es decir, entre 5 y 7) como parte del primer subarreglo, por lo que que la suma de los dos subarreglos se vuelve igual a 3+2+1+5+4=15 y 7+8=15. 
Entrada : arr = {3, 2, 2, 3} 
Salida : 0 
Explicación : La suma igual a 5 se obtiene sumando los primeros dos elementos y los últimos dos elementos como subarreglos separados sin insertar ningún número adicional. Por lo tanto, el entero más pequeño que se insertará es 0 en la posición 3. 
 

Para dividir el arreglo de tal manera que dé dos subarreglos con sumas iguales de sus respectivos elementos, un enfoque muy simple y directo es seguir agregando elementos desde el comienzo del arreglo, uno por uno y encontrar la diferencia entre sus suma y suma del resto de los elementos. Usamos un bucle iterativo para hacerlo. Para los índices de array 0 a N-1, seguimos agregando elementos de izquierda a derecha y encontramos su diferencia con la suma restante. Durante la primera iteración, la diferencia obtenida se considera mínima para poder realizar posteriores comparaciones. Para el resto de iteraciones, si la diferencia obtenida es menor que el mínimo considerado anteriormente, actualizamos el valor de mínimo. Hasta el final del bucle, finalmente obtenemos el número mínimo que se puede sumar.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program to find the smallest
// number to be added to make the
// sum of left and right subarrays equal
#include<bits/stdc++.h>
using namespace std;
 
// Function to find the minimum
// value to be added
int findMinEqualSums(int a[], int N)
{
    // Variable to store entire
    // array sum
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
        sum += a[i];
    }
 
    // Variables to store sum of
    // subarray1 and subarray 2
    int sum1 = 0, sum2 = 0;
 
    // minimum value to be added
    int min = INT_MAX;
 
    // Traverse through the array
    for (int i = 0; i < N; i++)
    {
        // Sum of both halves
        sum1 += a[i];
        sum2 = sum - sum1;
 
        // Calculate minimum number
        // to be added
        if (abs(sum1 - sum2) < min)
        {
            min = abs(sum1 - sum2);
        }
 
        if (min == 0)
        {
            break;
        }
    }
 
    return min;
}
 
// Driver code
int main()
{
    int a[] = { 3, 2, 1, 5, 7, 8 };
 
    // Length of array
    int N = sizeof(a) / sizeof(a[0]);
 
    cout << (findMinEqualSums(a, N));
}
 
// This code is contributed
// by ChitraNayal

Java

// Java program to find the smallest
// number to be added to make the
// sum of left and right subarrays equal
import java.io.*;
import java.util.*;
 
class GFG
{
 
// Function to find the minimum
// value to be added
static int findMinEqualSums(int[] a, int N)
{
    // Variable to store
    // entire array sum
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
        sum += a[i];
    }
 
    // Variables to store sum of
    // subarray1 and subarray 2
    int sum1 = 0, sum2 = 0;
 
    // minimum value to be added
    int min = Integer.MAX_VALUE;
 
    // Traverse through the array
    for (int i = 0; i < N; i++)
    {
        // Sum of both halves
        sum1 += a[i];
        sum2 = sum - sum1;
 
        // Calculate minimum number
        // to be added
        if (Math.abs(sum1 - sum2) < min)
        {
            min = Math.abs(sum1 - sum2);
        }
 
        if (min == 0)
        {
            break;
        }
    }
 
    return min;
}
 
// Driver code
public static void main(String args[])
{
    int[] a = { 3, 2, 1, 5, 7, 8 };
 
    // Length of array
    int N = a.length;
 
    System.out.println(findMinEqualSums(a, N));
}
}

Python3

import sys
# Python3 program to find the smallest
# number to be added to make the
# sum of left and right subarrays equal
 
# Function to find the minimum
# value to be added
def findMinEqualSums(a, N):
 
    # Variable to store entire
    # array sum
    sum = 0
    for i in range(0,N):
     
        sum = sum+a[i]
     
 
    # Variables to store sum of
    # subarray1 and subarray 2
    sum1 = 0
    sum2 = 0
 
    # minimum value to be added
    min = sys.maxsize
 
    # Traverse through the array
    for i in range(0, N-1):
     
        # Sum of both halves
        sum1 += a[i]
        sum2 = sum - sum1
 
        # Calculate minimum number
        # to be added
        if (abs(sum1 - sum2) < min):
            min = abs(sum1 - sum2)
         
 
        if (min == 0) :
         
            break
    return min
 
# Driver code
if __name__=='__main__':
    a = [3, 2, 1, 5, 7, 8]
 
    # Length of array
    N = len(a)
 
    print(findMinEqualSums(a, N))
 
# This code is contributed
# by Shivi_Aggarwal

C#

// C# program to find the smallest
// number to be added to make the
// sum of left and right subarrays equal
using System;
class GFG
{
 
// Function to find the minimum
// value to be added
static int findMinEqualSums(int[] a, int N)
{
    // Variable to store
    // entire array sum
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
        sum += a[i];
    }
 
    // Variables to store sum of
    // subarray1 and subarray 2
    int sum1 = 0, sum2 = 0;
 
    // minimum value to be added
    int min = int.MaxValue;
 
    // Traverse through the array
    for (int i = 0; i < N; i++)
    {
        // Sum of both halves
        sum1 += a[i];
        sum2 = sum - sum1;
 
        // Calculate minimum number
        // to be added
        if (Math.Abs(sum1 - sum2) < min)
        {
            min = Math.Abs(sum1 - sum2);
        }
 
        if (min == 0)
        {
            break;
        }
    }
 
    return min;
}
 
// Driver code
public static void Main()
{
    int[] a = { 3, 2, 1, 5, 7, 8 };
 
    // Length of array
    int N = a.Length;
 
    Console.WriteLine(findMinEqualSums(a, N));
}
}
// This code is contributed by shs

PHP

<?php
// PHP program to find the smallest
// number to be added to make the
// sum of left and right subarrays equal
 
// Function to find the minimum
// value to be added
function findMinEqualSums($a, $N)
{
    // Variable to store entire
    // array sum
    $sum = 0;
    for ($i = 0; $i < $N; $i++)
    {
        $sum += $a[$i];
    }
 
    // Variables to store sum of
    // subarray1 and subarray 2
    $sum1 = 0; $sum2 = 0;
 
    // minimum value to be added
    $min = PHP_INT_MAX;
 
    // Traverse through the array
    for ($i = 0; $i < $N; $i++)
    {
        // Sum of both halves
        $sum1 += $a[$i];
        $sum2 = $sum - $sum1;
 
        // Calculate minimum number
        // to be added
        if (abs($sum1 - $sum2) < $min)
        {
            $min = abs($sum1 - $sum2);
        }
 
        if ($min == 0)
        {
            break;
        }
    }
 
    return $min;
}
 
// Driver code
$a = array( 3, 2, 1, 5, 7, 8 );
 
// Length of array
$N = count($a);
 
echo (findMinEqualSums($a, $N));
 
// This code is contributed
// shs
?>

Javascript

<script>
// Javascript program to find the smallest
// number to be added to make the
// sum of left and right subarrays equal
 
// Function to find the minimum
// value to be added
function findMinEqualSums(a,N)
{
    // Variable to store
    // entire array sum
    let sum = 0;
    for (let i = 0; i < N; i++)
    {
        sum += a[i];
    }
   
    // Variables to store sum of
    // subarray1 and subarray 2
    let sum1 = 0, sum2 = 0;
   
    // minimum value to be added
    let min = Number.MAX_VALUE;
   
    // Traverse through the array
    for (let i = 0; i < N; i++)
    {
        // Sum of both halves
        sum1 += a[i];
        sum2 = sum - sum1;
   
        // Calculate minimum number
        // to be added
        if (Math.abs(sum1 - sum2) < min)
        {
            min = Math.abs(sum1 - sum2);
        }
   
        if (min == 0)
        {
            break;
        }
    }
   
    return min;
}
 
// Driver code
let a=[3, 2, 1, 5, 7, 8];
// Length of array
let N = a.length;
document.write(findMinEqualSums(a, N));
     
 
// This code is contributed by avanitrachhadiya2155
</script>
Producción: 

4

 

Tiempo Complejidad : O(n)
Espacio Auxiliar : O(1) 

Publicación traducida automáticamente

Artículo escrito por rachana soma 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 *