Dada una array A[] de tamaño N , la tarea es verificar si existe algún número entero que divida todos los elementos de esa array y se encuentre en el rango de elementos mínimos y máximos (ambos incluidos) de esa array.
Ejemplos:
Entrada: A = {27, 6, 9, 3, 21}
Salida: 1
Explicación: Aquí, 3 se encuentra entre min(3) y max(27) de esta array
y divide todos los elementos de esta array.Entrada: A = {4, 7, 12, 13, 20}
Salida: 0
Explicación: Ningún número entre 4 y 20 (ambos incluidos) divide
todos los elementos de la array.
Acercarse:
La idea es simplemente verificar todos los números posibles entre el elemento mínimo y máximo de la array, ya sea que alguno de ellos divida todos los elementos de esa array o no.
Siga los pasos a continuación para implementar esta idea:
- Use dos bucles anidados, uno es del elemento mínimo al elemento máximo y otro es para verificar si divide todos los números o no.
- En el ciclo anidado, inicialice el conteo a 0 e incremente el conteo cada vez que divida el valor.
- Si en cualquier iteración el conteo se vuelve igual a N, entonces devuelve verdadero.
- De lo contrario, si no se encuentra dicho elemento, devuelve falso.
A continuación se muestra la implementación de este enfoque:
C++
// C++ code to implement above approach #include <bits/stdc++.h> using namespace std; // Function to check whether a number exist // or not that lies between min and max element // and divides all the elements in the array bool solve(int arr[], int n) { int mini = *min_element(arr, arr + n); int maxi = *max_element(arr, arr + n); int count = 0; for (int i = mini; i <= maxi; i++) { for (int j = 0; j < n; j++) { if (arr[j] % i == 0) count++; } if (count == n) return true; count = 0; } return false; } // Driver code int main() { int A[] = { 27, 6, 9, 3, 21 }; // Function call int N = sizeof(A) / sizeof(A[0]); if (solve(A, N)) cout << "Yes"; else cout << "No"; return 0; }
Javascript
// Javascript code to implement above approach <script> // Function to check whether a number exist // or not that lies between min and max element // and divides all the elements in the array function solve(arr,n) { let mini = Math.min.apply(null, arr); let maxi = Math.max.apply(null, arr); let count = 0; for (let i = mini; i <= maxi; i++) { for (let j = 0; j < n; j++) { if (arr[j] % i == 0) count++; } if (count == n) return true; count = 0; } return false; } // Driver code let A = [ 27, 6, 9, 3, 21 ]; // Function call let N = A.length; if (solve(A, N)) document.write("Yes"); else document.write("No"); // This code is contributed by satwik4409. </script>
Yes
Complejidad de tiempo: O(d * N), donde d = max_element – min_element
Complejidad de espacio: O(1)