Dada una array con N elementos distintos. La tarea es encontrar el número mínimo de elementos que se cambiarán en la array de modo que la array contenga los primeros N términos de secuencia de Lucas . Nota : los términos de Lucas pueden estar presentes en cualquier orden en la array. Ejemplos :
Entrada : arr[] = {29, 1, 3, 4, 5, 11, 18, 2}
Salida : 1
5 debe cambiarse a 7, para obtener los primeros N(8) términos de la Secuencia de Lucas.
Por lo tanto, se requiere 1 cambio
Entrada : arr[] = {4, 2, 3, 1}
Salida : 0
Todos los elementos ya son los primeros N(4) términos en la secuencia de Lucas.
Acercarse:
- Inserte los primeros N (tamaño de la array de entrada) términos de secuencia de Lucas en un conjunto.
- Atraviese la array de izquierda a derecha y verifique si el elemento de la array está presente en el conjunto.
- Si está presente, retírelo del conjunto.
- Los cambios mínimos requeridos son el tamaño del conjunto restante final.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to find the minimum number // of elements to be changed in the array // to make it a Lucas Sequence #include <bits/stdc++.h> using namespace std; // Function that finds minimum changes to // be made in the array int lucasArray(int arr[], int n) { set<int> s; // a and b are first two // lucas numbers int a = 2, b = 1; int c; // insert first n lucas elements to set s.insert(a); if (n >= 2) s.insert(b); for (int i = 0; i < n - 2; i++) { s.insert(a + b); c = a + b; a = b; b = c; } set<int>::iterator it; for (int i = 0; i < n; i++) { // if lucas element is present in array, // remove it from set it = s.find(arr[i]); if (it != s.end()) s.erase(it); } // return the remaining number of // elements in the set return s.size(); } // Driver code int main() { int arr[] = { 7, 11, 22, 4, 2, 1, 8, 9 }; int n = sizeof(arr) / sizeof(arr[0]); cout << lucasArray(arr, n); return 0; }
Java
// Java program to find the minimum number // of elements to be changed in the array // to make it a Lucas Sequence import java.util.HashSet; import java.util.Set; class GfG { // Function that finds minimum changes // to be made in the array static int lucasArray(int arr[], int n) { HashSet<Integer> s = new HashSet<>(); // a and b are first two lucas numbers int a = 2, b = 1, c; // insert first n lucas elements to set s.add(a); if (n >= 2) s.add(b); for (int i = 0; i < n - 2; i++) { s.add(a + b); c = a + b; a = b; b = c; } for (int i = 0; i < n; i++) { // if lucas element is present in array, // remove it from set if (s.contains(arr[i])) s.remove(arr[i]); } // return the remaining number of // elements in the set return s.size(); } // Driver code public static void main(String []args) { int arr[] = { 7, 11, 22, 4, 2, 1, 8, 9 }; int n = arr.length; System.out.println(lucasArray(arr, n)); } } // This code is contributed by Rituraj Jain
Python3
# Python 3 program to find the minimum number # of elements to be changed in the array # to make it a Lucas Sequence # Function that finds minimum changes to # be made in the array def lucasArray(arr, n): s = set() # a and b are first two # lucas numbers a = 2 b = 1 # insert first n lucas elements to set s.add(a) if (n >= 2): s.add(b) for i in range(n - 2): s.add(a + b) c = a + b a = b b = c for i in range(n): # if lucas element is present in array, # remove it from set if (arr[i] in s): s.remove(arr[i]) # return the remaining number of # elements in the set return len(s) # Driver code if __name__ == '__main__': arr = [7, 11, 22, 4, 2, 1, 8, 9] n = len(arr) print(lucasArray(arr, n)) # This code is contributed by # Surendra_Gangwar
C#
// C# program to find the minimum number // of elements to be changed in the array // to make it a Lucas Sequence using System; using System.Collections.Generic; class GFG { // Function that finds minimum changes // to be made in the array static int lucasArray(int []arr, int n) { HashSet<int> s = new HashSet<int>(); // a and b are first two lucas numbers int a = 2, b = 1, c; // insert first n lucas elements to set s.Add(a); if (n >= 2) s.Add(b); for (int i = 0; i < n - 2; i++) { s.Add(a + b); c = a + b; a = b; b = c; } for (int i = 0; i < n; i++) { // if lucas element is present in array, // remove it from set if (s.Contains(arr[i])) s.Remove(arr[i]); } // return the remaining number of // elements in the set return s.Count; } // Driver code public static void Main(String []args) { int []arr = { 7, 11, 22, 4, 2, 1, 8, 9 }; int n = arr.Length; Console.WriteLine(lucasArray(arr, n)); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // Javascript program to find the minimum number // of elements to be changed in the array // to make it a Lucas Sequence // Function that finds minimum changes to // be made in the array function lucasArray(arr, n) { var s = new Set(); // a and b are first two // lucas numbers var a = 2, b = 1; var c; // insert first n lucas elements to set s.add(a); if (n >= 2) s.add(b); for (var i = 0; i < n - 2; i++) { s.add(a + b); c = a + b; a = b; b = c; } for (var i = 0; i < n; i++) { // if lucas element is present in array, // remove it from set s.delete(arr[i]) } // return the remaining number of // elements in the set return s.size; } // Driver code var arr = [7, 11, 22, 4, 2, 1, 8, 9 ]; var n = arr.length; document.write( lucasArray(arr, n)); </script>
3
Publicación traducida automáticamente
Artículo escrito por Shashank_Sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA