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: Sí
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>
YES
Complejidad temporal: O(n)
Espacio auxiliar: O(1)