Elementos de array mínimos que se cambiarán para convertirlo en una secuencia de Lucas

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 LucasNota : 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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *