给定N个整数的数组arr [] ,任务是删除数组中存在的所有斐波那契数。
例子:
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.
方法:想法是使用散列来预先计算和存储斐波那契数,然后检查节点是否在O(1)时间中包含斐波那契值。
- 遍历数组,并使用预先计算的哈希值检查当前数字是否为斐波那契。
- 如果是,则将其后的所有元素左移以删除该斐波那契数并减小数组长度的值。
- 对数组的所有元素重复上述步骤。
下面是上述方法的实现:
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