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

📅  最后修改于: 2021-10-28 01:26:12             🧑  作者: 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


Javascript


输出:
4 6 7 10 11 14 15

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程