Dada una array arr[] de N enteros positivos, la tarea es encontrar el valor más pequeño posible del último elemento restante en la array después de realizar las siguientes operaciones cualquier número de veces:
- Seleccione un par de índices (i, j) tales que arr[i] >= arr[j] y reemplace arr[i] con arr[i] – arr[j] .
- Si un elemento de array arr[i] <= 0 , elimínelo de la array.
Ejemplo:
Entrada: arr[] = {2, 4, 8, 32}
Salida: 2
Explicación: En las primeras 4 operaciones, seleccione (i, j) como (3, 2). Por lo tanto, la array después de 4 operaciones se convertirá en arr[] = {2, 4, 8, 0}. Aquí, arr[3] se puede eliminar como arr[3] = 0. De manera similar, realice la operación dos veces para (i, j) = (2, 1). La array después de las operaciones es arr[] = {2, 4}. Ahora realiza la operación dada dos veces para (i, j) como (1, 0). La array final será arr[] = {2}. Por lo tanto, el último elemento restante es 2, que es el mínimo posible.Entrada: arr[] = {5, 13, 8, 10}
Salida: 1
Enfoque: El problema dado se puede resolver usando las siguientes observaciones:
- De acuerdo con el Algoritmo Euclidiano Básico para encontrar el MCD de dos enteros (x, y) , se puede deducir que MCD(x, y) = MCD(x, y – x) , si y > x , en caso contrario, los valores de x e y pueden intercambiarse simplemente. Esta relación será cierta hasta que el valor de y – x se reduzca a 0.
- Por lo tanto, se puede concluir que el valor mínimo alcanzable del par (x, y) al restar el valor mayor del valor menor es GCD(x, y) .
Por lo tanto, usando la observación anterior, la respuesta requerida será el GCD de todos los elementos de la array dada arr[] .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ Program os the above approach #include <bits/stdc++.h> using namespace std; // Function to minimize the last // remaining element of array int minValue(int arr[], int n) { // Stores the required value int ans; // Initialize answer ans = arr[0]; // Loop to traverse arr[] for (int i = 1; i < n; i++) { // Calculate the GCD ans = __gcd(ans, arr[i]); } // Return Answer return ans; } // Driver Code int main() { int arr[] = { 5, 13, 8, 10 }; int N = sizeof(arr) / sizeof(arr[0]); cout << minValue(arr, N); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Recursive function to return gcd of a and b static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function to minimize the last // remaining element of array static int minValue(int arr[], int n) { // Stores the required value int ans; // Initialize answer ans = arr[0]; // Loop to traverse arr[] for (int i = 1; i < n; i++) { // Calculate the GCD ans = gcd(ans, arr[i]); } // Return Answer return ans; } // Driver Code public static void main (String[] args) { int arr[] = { 5, 13, 8, 10 }; int N = arr.length; System.out.println(minValue(arr, N)); } } // This code is contributed by hrithikgarg03188.
Python3
# Python Program os the above approach def __gcd (a, b): if (not b): return a; return __gcd(b, a % b); # Function to minimize the last # remaining element of array def minValue (arr, n): # Stores the required value ans = None # Initialize answer ans = arr[0]; # Loop to traverse arr[] for i in range(1, n): # Calculate the GCD ans = __gcd(ans, arr[i]); # Return Answer return ans; # Driver Code arr = [5, 13, 8, 10]; N = len(arr) print(minValue(arr, N)); # This code is contributed by gfgking
C#
// C# program for the above approach using System; class GFG { // Recursive function to return gcd of a and b static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function to minimize the last // remaining element of array static int minValue(int []arr, int n) { // Stores the required value int ans; // Initialize answer ans = arr[0]; // Loop to traverse arr[] for (int i = 1; i < n; i++) { // Calculate the GCD ans = gcd(ans, arr[i]); } // Return Answer return ans; } // Driver Code public static void Main () { int []arr = { 5, 13, 8, 10 }; int N = arr.Length; Console.Write(minValue(arr, N)); } } // This code is contributed by Samim Hossain Mondal.
Javascript
<script> // JavaScript Program os the above approach const __gcd = (a, b) => { if (!b) { return a; } return __gcd(b, a % b); } // Function to minimize the last // remaining element of array const minValue = (arr, n) => { // Stores the required value let ans; // Initialize answer ans = arr[0]; // Loop to traverse arr[] for (let i = 1; i < n; i++) { // Calculate the GCD ans = __gcd(ans, arr[i]); } // Return Answer return ans; } // Driver Code let arr = [5, 13, 8, 10]; let N = arr.length; document.write(minValue(arr, N)); // This code is contributed by rakeshsahni </script>
1
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por hrithikgarg03188 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA