Compruebe si cada índice i tiene un índice j tal que la suma de los elementos en ambas direcciones sea igual

Dada una array circular de tamaño N. La tarea es verificar si, para cada índice i que comienza de 0 a N-1, existe un índice j que no es igual a i tal que la suma de todos los números en el sentido de las agujas del reloj desde i a j es igual a la suma de todos los números en el sentido contrario a las agujas del reloj de i a j.
Ejemplos:
 

Entrada: a[] = {1, 4, 1, 4} 
Salida: Sí 
La array circular es 1->4->1->4. 
para el índice 0, j será 2, entonces la suma de los elementos del índice 0 al 2 en el sentido de las agujas del reloj será 1 + 4 + 1 = 6 y la suma de los elementos del índice 0 al 2 en el sentido contrario a las agujas del reloj será 1 + 4 + 1 = 6. 
para el índice 1, j será 3, entonces la suma de los elementos del índice 1 al 3 en el sentido de las agujas del reloj será 4 + 1 + 4 = 9 y la suma de los elementos del índice 1 al 3 en el sentido contrario a las agujas del reloj será 4 + 1 + 4 = 9. 
para el índice 2, j será 0, entonces la suma de los elementos del índice 2 al 0 en el sentido de las agujas del reloj será 1 + 4 + 1 = 6 y la suma de los elementos del índice 2 al 0 en el sentido contrario a las agujas del reloj será ser 1 + 4 + 1 = 6
para el índice 3, j será 1, entonces la suma de los elementos del índice 3 al 1 en el sentido de las agujas del reloj será 4 + 1 + 4 = 9 y la suma de los elementos del índice 3 al 1 en el sentido contrario a las agujas del reloj será 4 + 1 + 4 = 9
Entrada: a[] = {1, 1, 1, 1, 1, 1} 
Salida:

Acercarse: 
 

  • Cuando N es impar, la respuesta siempre será “NO” ya que no es posible encontrar un índice j para cada índice i.
  • Si N es par, compruebe si el elemento opuesto es exactamente el mismo para cada índice i, entonces la respuesta es «SÍ».
  • Si cualquiera de los elementos opuestos del índice, es decir, a[(i+(n/2))] no es igual a a[i] , entonces la respuesta será “NO”.

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

C++

// C++ program to check if the
// number lies in given range
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns the maximum element.
bool check(int a[], int n)
{
 
    // check for odd
    if (n % 2 == 1)
        return false;
 
    // check if the opposite element is same
    // as a[i]
    for (int i = 0; i < n / 2; i++) {
        if (a[i] != a[i + (n / 2)])
            return false;
    }
 
    return true;
}
 
// Driver code
int main()
{
    int a[] = { 1, 4, 1, 4 };
 
    int n = sizeof(a) / sizeof(a[0]);
 
    if (check(a, n))
        cout << "YES";
    else
        cout << "NO";
 
    return 0;
}

Java

//Java program to check if the
//number lies in given range
 
public class GFG {
 
    //Function that returns the maximum element.
    static boolean check(int a[], int n)
    {
 
     // check for odd
     if (n % 2 == 1)
         return false;
 
     // check if the opposite element is same
     // as a[i]
     for (int i = 0; i < n / 2; i++) {
         if (a[i] != a[i + (n / 2)])
             return false;
     }
 
     return true;
    }
 
    //Driver code
    public static void main(String[] args) {
         
        int a[] = { 1, 4, 1, 4 };
 
         int n = a.length;
 
         if (check(a, n))
             System.out.println("YES");
         else
             System.out.println("NO");
    }
}

Python 3

# Python 3 Program  to check if the
# number lies in given range
 
# Function that returns the maximum element.
def check(a, n) :
 
    # check for odd
    if n % 2 == 1:
        return False
 
    # check if the opposite element is same
    # as a[i]
    for i in range(n//2) :
        if a[i] != a[i + (n//2)]:
            return False
 
    return True
 
# Driver Code
if __name__ == "__main__" :
    a = [ 1, 4, 1, 4]
 
    n = len(a)
 
    if check(a, n) :
        print("YES")
    else :
        print("NO")
     
# This code is contributed by ANKITRAI1

C#

// C# program to check if the
// number lies in given range
 
class GFG
{
 
// Function that returns the
// maximum element.
static bool check(int[] a, int n)
{
 
// check for odd
if (n % 2 == 1)
    return false;
 
// check if the opposite
// element is same as a[i]
for (int i = 0; i < (int)n / 2; i++)
{
    if (a[i] != a[i + (int)(n / 2)])
        return false;
}
 
return true;
}
 
// Driver code
public static void Main()
{
    int[] a = new int[]{ 1, 4, 1, 4 };
 
    int n = a.Length;
 
    if (check(a, n))
        System.Console.WriteLine("YES");
    else
        System.Console.WriteLine("NO");
}
}
 
// This code is contributed by mits

PHP

<?php
// PHP program to check if the
// number lies in given range
 
// Function that returns the
// maximum element.
function check($a, $n)
{
 
    // check for odd
    if ($n % 2 == 1)
        return false;
 
    // check if the opposite
    // element is same as a[i]
    for ($i = 0; $i < $n / 2; $i++)
    {
        if ($a[$i] != $a[$i + ($n / 2)])
            return false;
    }
 
    return true;
}
 
// Driver code
$a = array( 1, 4, 1, 4 );
 
$n = sizeof($a);
 
if (check($a, $n))
    echo "YES";
else
    echo "NO";
 
// This code is contributed
// by Akanksha Rai(Abby_akku)

Javascript

<script>
 
// Javascript program to check if the
// number lies in given range
 
// Function that returns the maximum element.
function check( a, n)
{
 
    // check for odd
    if (n % 2 == 1)
        return false;
 
    // check if the opposite element is same
    // as a[i]
    for (var i = 0; i < parseInt(n / 2); i++) {
        if (a[i] != a[i + parseInt(n / 2)])
            return false;
    }
 
    return true;
}
 
// Driver code
var a = [ 1, 4, 1, 4 ];
var n = a.length;
if (check(a, n))
    document.write("YES");
else
    document.write("NO");
 
// This code is contributed by rrrtnx.
</script>
Producción: 

YES

 

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

Publicación traducida automáticamente

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