Skip to content
Related Articles

Related Articles

Remove all the fibonacci numbers from the given array
  • Last Updated : 20 Apr, 2020

Given an array arr[] of N integers, the task is to remove all the fibonacci numbers present in the array.

Examples:

Input: arr[] = {4, 6, 5, 3, 8, 7, 10, 11, 14, 15}
Output: 4 6 7 10 11 14 15
Explanation:
The array contains 3 fibonacci data values 5, 3 and 8.
These values have been removed from the array.

Input: arr[] = {2, 4, 7, 8, 9, 11}
Output: 4 7 9 11
Explanation:
The array contains 2 fibonacci data values 2 and 8.
These values have been removed from the array.

Approach: The idea is to use hashing to precompute and store the Fibonacci numbers, and then check if a node contains a Fibonacci value in O(1) time.



  1. Traverse the array and check if the current number is a Fibonacci or not using the precomputed hash.
  2. If it is, then left shift all the elements after it to remove this Fibonacci number and decrease the value of the array length.
  3. Repeat the above steps for all the elements of the array.

Below is the implementation of the above approach:

C++




// C++ program to remove all the
// fibonacci numbers from the
// given array
  
#include <bits/stdc++.h>
using namespace std;
  
const int sz = 1e3;
  
// Set to store all the Fibonacci numbers
set<int> 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<Integer> fib = new HashSet<Integer>();
   
// 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<int> fib = new HashSet<int>();
    
// 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
Output:
4 6 7 10 11 14 15

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :