📜  从给定数组中删除所有斐波那契数

📅  最后修改于: 2021-05-17 19:05:30             🧑  作者: Mango

给定N个整数的数组arr [] ,任务是删除数组中存在的所有斐波那契数。

例子:

方法:想法是使用散列来预先计算和存储斐波那契数,然后检查节点是否在O(1)时间中包含斐波那契值。

  1. 遍历数组,并使用预先计算的哈希值检查当前数字是否为斐波那契。
  2. 如果是,则将其后的所有元素左移以删除该斐波那契数并减小数组长度的值。
  3. 对数组的所有元素重复上述步骤。

下面是上述方法的实现:

C++
// C++ program to remove all the
// fibonacci numbers from the
// given array
  
#include 
using namespace std;
  
const int sz = 1e3;
  
// Set to store all the Fibonacci numbers
set fib;
  
// Function to generate Fibonacci numbers using
// Dynamic Programming and create hash table
// to check Fibonacci numbers
void fibonacci()
{
    // Storing the first two Fibonacci
    // numbers in the set
    int prev = 0, curr = 1, len = 2;
    fib.insert(prev);
    fib.insert(curr);
  
    // Compute the remaining Fibonacci numbers
    // until the max size and store them
    // in the set
    while (len <= sz) {
        int temp = curr + prev;
        fib.insert(temp);
        prev = curr;
        curr = temp;
        len++;
    }
}
  
// Function to print the elements of the array
void printArray(int arr[], int len)
{
    for (int i = 0; i < len; i++) {
        cout << arr[i] << ' ';
    }
}
  
// Function to remove all the Fibonacci numbers
// from the array
void removeFibonacci(int arr[], int len)
{
    // Creating a set containing
    // all the fibonacci numbers
    fibonacci();
  
    // Traverse the array
    for (int i = 0; i < len; i++) {
  
        // If the current element is fibonacci
        if (fib.find(arr[i]) != fib.end()) {
  
            // Shift all the elements on the
            // right of it to the left
            for (int j = i; j < len; j++) {
                arr[j] = arr[j + 1];
            }
  
            // Decrease the loop counter by 1
            // to check the shifted element
            i--;
  
            // Decrease the length
            len--;
        }
    }
  
    // Print the updated array
    printArray(arr, len);
}
  
// Driver code
int main()
{
    int arr[] = { 4, 6, 5, 3, 8, 7,
                  10, 11, 14, 15 };
  
    int len = sizeof(arr) / sizeof(int);
  
    removeFibonacci(arr, len);
  
    return 0;
}


Java
// Java program to remove all the
// fibonacci numbers from the
// given array
import java.util.*;
  
class GFG{
   
static int sz = (int) 1e3;
   
// Set to store all the Fibonacci numbers
static HashSet fib = new HashSet();
   
// Function to generate Fibonacci numbers using
// Dynamic Programming and create hash table
// to check Fibonacci numbers
static void fibonacci()
{
    // Storing the first two Fibonacci
    // numbers in the set
    int prev = 0, curr = 1, len = 2;
    fib.add(prev);
    fib.add(curr);
   
    // Compute the remaining Fibonacci numbers
    // until the max size and store them
    // in the set
    while (len <= sz) {
        int temp = curr + prev;
        fib.add(temp);
        prev = curr;
        curr = temp;
        len++;
    }
}
   
// Function to print the elements of the array
static void printArray(int arr[], int len)
{
    for (int i = 0; i < len; i++) {
        System.out.print(arr[i] +" ");
    }
}
   
// Function to remove all the Fibonacci numbers
// from the array
static void removeFibonacci(int arr[], int len)
{
    // Creating a set containing
    // all the fibonacci numbers
    fibonacci();
   
    // Traverse the array
    for (int i = 0; i < len; i++) {
   
        // If the current element is fibonacci
        if (fib.contains(arr[i])) {
   
            // Shift all the elements on the
            // right of it to the left
            for (int j = i; j < len - 1; j++) {
                arr[j] = arr[j + 1];
            }
   
            // Decrease the loop counter by 1
            // to check the shifted element
            i--;
   
            // Decrease the length
            len--;
        }
    }
   
    // Print the updated array
    printArray(arr, len);
}
   
// Driver code
public static void main(String[] args)
{
    int arr[] = { 4, 6, 5, 3, 8, 7,
                  10, 11, 14, 15 };
   
    int len = arr.length;
    removeFibonacci(arr, len);
}
}
  
// This code is contributed by 29AjayKumar


Python3
# Python 3 program to remove all the
# fibonacci numbers from the
# given array
  
sz = 1000
  
# Set to store all the Fibonacci numbers
fib = set()
  
# Function to generate Fibonacci numbers using
# Dynamic Programming and create hash table
# to check Fibonacci numbers
def fibonacci():
  
    # Storing the first two Fibonacci
    # numbers in the set
    prev , curr , length = 0 , 1, 2
    fib.add(prev)
    fib.add(curr)
  
    # Compute the remaining Fibonacci numbers
    # until the max size and store them
    # in the set
    while (length <= sz):
        temp = curr + prev
        fib.add(temp)
        prev = curr
        curr = temp
        length += 1
  
# Function to print the elements of the array
def printArray( arr, length):
  
    for i in range(length):
        print(arr[i],end=" ")
          
# Function to remove all the Fibonacci numbers
# from the array
def removeFibonacci( arr, length):
  
    # Creating a set containing
    # all the fibonacci numbers
    fibonacci()
  
    # Traverse the array
    for i in fib:
        if i in arr:
            arr.remove(i)
            length -= 1
  
    # Print the updated array
    printArray(arr, length)
  
# Driver code
if __name__ == "__main__":
      
    arr = [ 4, 6, 5, 3, 8, 7,
                10, 11, 14, 15 ]
  
    length = len(arr)
    removeFibonacci(arr, length)
  
# This code is contributed by chitranayal


C#
// C# program to remove all the
// fibonacci numbers from the
// given array
using System;
using System.Collections.Generic;
  
class GFG{
    
static int sz = (int) 1e3;
    
// Set to store all the Fibonacci numbers
static HashSet fib = new HashSet();
    
// Function to generate Fibonacci numbers using
// Dynamic Programming and create hash table
// to check Fibonacci numbers
static void fibonacci()
{
    // Storing the first two Fibonacci
    // numbers in the set
    int prev = 0, curr = 1, len = 2;
    fib.Add(prev);
    fib.Add(curr);
    
    // Compute the remaining Fibonacci numbers
    // until the max size and store them
    // in the set
    while (len <= sz) {
        int temp = curr + prev;
        fib.Add(temp);
        prev = curr;
        curr = temp;
        len++;
    }
}
    
// Function to print the elements of the array
static void printArray(int []arr, int len)
{
    for (int i = 0; i < len; i++) {
        Console.Write(arr[i] +" ");
    }
}
    
// Function to remove all the Fibonacci numbers
// from the array
static void removeFibonacci(int []arr, int len)
{
    // Creating a set containing
    // all the fibonacci numbers
    fibonacci();
    
    // Traverse the array
    for (int i = 0; i < len; i++) {
    
        // If the current element is fibonacci
        if (fib.Contains(arr[i])) {
    
            // Shift all the elements on the
            // right of it to the left
            for (int j = i; j < len - 1; j++) {
                arr[j] = arr[j + 1];
            }
    
            // Decrease the loop counter by 1
            // to check the shifted element
            i--;
    
            // Decrease the length
            len--;
        }
    }
    
    // Print the updated array
    printArray(arr, len);
}
    
// Driver code
public static void Main(String[] args)
{
    int []arr = { 4, 6, 5, 3, 8, 7,
                  10, 11, 14, 15 };
    
    int len = arr.Length;
    removeFibonacci(arr, len);
}
}
  
// This code is contributed by 29AjayKumar


输出:
4 6 7 10 11 14 15