Encuentre dos subarreglos que no se intersequen y que tengan la misma suma de todos los elementos elevados a la potencia de 2

Dada una array arr[] de enteros positivos de tamaño N , la tarea es verificar si existen dos subarreglos que no se intersecan en arr[] tales que la suma de todos los 2 posibles (subarr[i]) y la suma de todos los 2 posibles (subarr2[j]) son iguales.

Ejemplos:

Entrada: arr[] = {4, 3, 0, 1, 2, 0}
Salida:
Explicación: Al expresar cada elemento del arreglo en forma de 2 arr[i] , el arreglo se modifica a { 16, 8, 1, 2, 4, 1}.
Por tanto, dos subarreglos válidos son { 16 } y { 8, 1, 2, 4, 1 } cuya suma es igual.

Entrada: arr[]={ 3, 4 }
Salida: NO

Enfoque: dado que la representación binaria de todas las potencias de 2 es única, dos de estos subarreglos solo se pueden obtener si hay algún elemento repetitivo presente en ese arreglo . De lo contrario, no es posible.

Siga los pasos a continuación para resolver el problema: 

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if two non-intersecting
// subarrays with equal sum exists or not
void findSubarrays(int arr[], int N)
{
    // Sort the given array
    sort(arr, arr + N);
    int i = 0;
 
    // Traverse the array
    for (i = 0; i < N - 1; i++) {
 
        // Check for duplicate elements
        if (arr[i] == arr[i + 1]) {
 
            cout << "YES" << endl;
            return;
        }
    }
 
    // If no duplicate element is
    // present in the array
    cout << "NO" << endl;
}
 
// Driver Code
int main()
{
    // Given array
    int arr[] = { 4, 3, 0, 1, 2, 0 };
 
    // Size of array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    findSubarrays(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
  
class GFG{
      
// Function to check if two non-intersecting
// subarrays with equal sum exists or not
static void findSubarrays(int arr[], int N)
{
     
    // Sort the given array
    Arrays.sort(arr);
    int i = 0;
  
    // Traverse the array
    for(i = 0; i < N - 1; i++)
    {
         
        // Check for duplicate elements
        if (arr[i] == arr[i + 1])
        {
            System.out.println("YES");
            return;
        }
    }
  
    // If no duplicate element is
    // present in the array
    System.out.println("NO");
}
  
// Driver code
public static void main(String[] args)
{
     
    // Given array
    int[] arr = { 4, 3, 0, 1, 2, 0 };
  
    // Size of array
    int N = arr.length;
  
    findSubarrays(arr, N);
}
}
 
// This code is contributed by susmitakundugoaldanga

Python3

# Python program for the above approach
 
# Function to check if two non-intersecting
# subarrays with equal sum exists or not
def findSubarrays(arr, N):
   
    # Sort the given array
    arr.sort();
    i = 0;
 
    # Traverse the array
    for i in range(N - 1):
 
        # Check for duplicate elements
        if (arr[i] == arr[i + 1]):
            print("YES");
            return;
 
    # If no duplicate element is
    # present in the array
    print("NO");
 
# Driver code
if __name__ == '__main__':
   
    # Given array
    arr = [4, 3, 0, 1, 2, 0];
 
    # Size of array
    N = len(arr);
 
    findSubarrays(arr, N);
 
# This code is contributed by 29AjayKumar

C#

// C# program for the above approach
using System;
   
class GFG{
       
// Function to check if two non-intersecting
// subarrays with equal sum exists or not
static void findSubarrays(int[] arr, int N)
{
     
    // Sort the given array
    Array.Sort(arr);
    int i = 0;
   
    // Traverse the array
    for(i = 0; i < N - 1; i++)
    {
         
        // Check for duplicate elements
        if (arr[i] == arr[i + 1])
        {
            Console.WriteLine("YES");
            return;
        }
    }
   
    // If no duplicate element is
    // present in the array
    Console.WriteLine("NO");
}
   
// Driver code
public static void Main()
{
     
    // Given array
    int[] arr = { 4, 3, 0, 1, 2, 0 };
   
    // Size of array
    int N = arr.Length;
   
    findSubarrays(arr, N);
}
}
 
// This code is contributed by sanjoy_62

Javascript

<script>
// javascript program for the above approach
 
    // Function to check if two non-intersecting
    // subarrays with equal sum exists or not
    function findSubarrays(arr , N) {
 
        // Sort the given array
        arr.sort();
        var i = 0;
 
        // Traverse the array
        for (i = 0; i < N - 1; i++) {
 
            // Check for duplicate elements
            if (arr[i] == arr[i + 1]) {
                document.write("YES");
                return;
            }
        }
 
        // If no duplicate element is
        // present in the array
        document.write("NO");
    }
 
    // Driver code
     
 
        // Given array
        var arr = [ 4, 3, 0, 1, 2, 0 ];
 
        // Size of array
        var N = arr.length;
 
        findSubarrays(arr, N);
 
// This code is contributed by gauravrajput1
</script>
Producción: 

YES

 

Complejidad temporal: O(NLogN)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

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