Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Largest and smallest Fibonacci numbers in an Array

  • Last Updated : 24 May, 2021

Given an array arr[] of N positive integers, the task is to find the minimum (smallest) and maximum (largest) Fibonacci elements in the given array.
Examples: 
 

Input: arr[] = 1, 2, 3, 4, 5, 6, 7 
Output: 1, 5 
Explanation : 
The array contains 4 fibonacci values 1, 2, 3 and 5. 
Hence, the maximum is 5 and the minimum is 1.
Input: arr[] = 13, 3, 15, 6, 8, 11 
Output:3, 13 
Explanation: 
The array contains 3 fibonacci values 13, 3 and 8. 
Hence, the maximum is 13 and the minimum is 3. 
 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

 

Approach: This approach is similar to finding the minimum and maximum element in an array. Traverse the array one by one, and check if it is a Fibonacci number or not. If it is, then find the maximum and minimum among such numbers.
Inorder to check if the number is a Fibonacci number or not optimally O(1), generate all Fibonacci numbers up to the maximum element of the array using dynamic programming and store them in a hash table.
Below is the implementation of above approach: 
 

C++




// C++ program to find minimum and maximum
// fibonacci number in given array
#include <bits/stdc++.h>
using namespace std;
 
// Function to create hash table
// to check Fibonacci numbers
void createHash(set<int>& hash,
                int maxElement)
{
    // Insert initial two numbers
    // in the hash table
    int prev = 0, curr = 1;
    hash.insert(prev);
    hash.insert(curr);
 
    while (curr <= maxElement) {
 
        // Sum of previous two numbers
        int temp = curr + prev;
 
        hash.insert(temp);
 
        // Update the variable each time
        prev = curr;
        curr = temp;
    }
}
 
// Function to find minimum and maximum
// fibonacci number in given array
void fibonacci(int arr[], int n)
{
 
    // Find maximum value in the array
    int max_val
        = *max_element(
            arr, arr + n);
 
    // Creating a set containing
    // all Fibonacci numbers up to
    // maximum value in the array
    set<int> hash;
    createHash(hash, max_val);
 
    // For storing the Minimum
    // and Maximum Fibonacci number
    int minimum = INT_MAX;
    int maximum = INT_MIN;
 
    for (int i = 0; i < n; i++) {
 
        // Check if current element
        // is a fibonacci number
        if (hash.find(arr[i]) != hash.end()) {
 
            // Update the maximum and
            // minimum accordingly
            minimum = min(minimum, arr[i]);
            maximum = max(maximum, arr[i]);
        }
    }
 
    cout << minimum << ", "
         << maximum << endl;
}
 
// Driver code
int main()
{
 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    fibonacci(arr, n);
 
    return 0;
}

Java




// Java program to find minimum and maximum
// fibonacci number in given array
import java.util.*;
 
class GFG{
  
// Function to create hash table
// to check Fibonacci numbers
static void createHash(HashSet<Integer> hash,
                int maxElement)
{
    // Insert initial two numbers
    // in the hash table
    int prev = 0, curr = 1;
    hash.add(prev);
    hash.add(curr);
  
    while (curr <= maxElement) {
  
        // Sum of previous two numbers
        int temp = curr + prev;
  
        hash.add(temp);
  
        // Update the variable each time
        prev = curr;
        curr = temp;
    }
}
  
// Function to find minimum and maximum
// fibonacci number in given array
static void fibonacci(int arr[], int n)
{
  
    // Find maximum value in the array
    int max_val= Arrays.stream(arr).max().getAsInt();
  
    // Creating a set containing
    // all Fibonacci numbers up to
    // maximum value in the array
    HashSet<Integer> hash = new HashSet<Integer>();
    createHash(hash, max_val);
  
    // For storing the Minimum
    // and Maximum Fibonacci number
    int minimum = Integer.MAX_VALUE;
    int maximum = Integer.MIN_VALUE;
  
    for (int i = 0; i < n; i++) {
  
        // Check if current element
        // is a fibonacci number
        if (hash.contains(arr[i])) {
  
            // Update the maximum and
            // minimum accordingly
            minimum = Math.min(minimum, arr[i]);
            maximum = Math.max(maximum, arr[i]);
        }
    }
  
    System.out.print(minimum+ ", "
         + maximum +"\n");
}
  
// Driver code
public static void main(String[] args)
{
  
    int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
    int n = arr.length;
  
    fibonacci(arr, n);
  
}
}
 
// This code is contributed by sapnasingh4991

Python3




# Python 3 program to find minimum and maximum
# fibonacci number in given array
 
import sys
 
# Function to create hash table
# to check Fibonacci numbers
def createHash(hash, maxElement):
    # Insert initial two numbers
    # in the hash table
    prev = 0
    curr = 1
    hash.add(prev)
    hash.add(curr)
 
    while (curr <= maxElement):
        # Sum of previous two numbers
        temp = curr + prev
 
        hash.add(temp)
        # Update the variable each time
        prev = curr
        curr = temp
 
# Function to find minimum and maximum
# fibonacci number in given array
def fibonacci(arr, n):
 
    # Find maximum value in the array
    max_val = max(arr)
 
    # Creating a set containing
    # all Fibonacci numbers up to
    # maximum value in the array
    hash = set()
    createHash(hash, max_val)
 
    # For storing the Minimum
    # and Maximum Fibonacci number
    minimum = sys.maxsize
    maximum = -sys.maxsize-1
 
    for i in range(n):
 
        # Check if current element
        # is a fibonacci number
        if (arr[i] in hash):
 
            # Update the maximum and
            # minimum accordingly
            minimum = min(minimum, arr[i])
            maximum = max(maximum, arr[i])
 
    print(minimum,end = ", ")
    print(maximum)
 
# Driver code
if __name__ == '__main__':
    arr = [1, 2, 3, 4, 5, 6, 7]
    n = len(arr)
 
    fibonacci(arr, n)
 
# This code is contributed by Surendra_Gangwar

C#




// C# program to find minimum and maximum
// fibonacci number in given array
using System;
using System.Linq;
using System.Collections.Generic;
 
class GFG{
 
// Function to create hash table
// to check Fibonacci numbers
static void createHash(HashSet<int> hash,
                int maxElement)
{
    // Insert initial two numbers
    // in the hash table
    int prev = 0, curr = 1;
    hash.Add(prev);
    hash.Add(curr);
 
    while (curr <= maxElement) {
 
        // Sum of previous two numbers
        int temp = curr + prev;
 
        hash.Add(temp);
 
        // Update the variable each time
        prev = curr;
        curr = temp;
    }
}
 
// Function to find minimum and maximum
// fibonacci number in given array
static void fibonacci(int []arr, int n)
{
 
    // Find maximum value in the array
    int max_val= arr.Max();
 
    // Creating a set containing
    // all Fibonacci numbers up to
    // maximum value in the array
    HashSet<int> hash = new HashSet<int>();
    createHash(hash, max_val);
 
    // For storing the Minimum
    // and Maximum Fibonacci number
    int minimum = int.MaxValue;
    int maximum = int.MinValue;
 
    for (int i = 0; i < n; i++) {
 
        // Check if current element
        // is a fibonacci number
        if (hash.Contains(arr[i])) {
 
            // Update the maximum and
            // minimum accordingly
            minimum = Math.Min(minimum, arr[i]);
            maximum = Math.Max(maximum, arr[i]);
        }
    }
 
    Console.Write(minimum+ ", "
        + maximum +"\n");
}
 
// Driver code
public static void Main(String[] args)
{
    int []arr = { 1, 2, 3, 4, 5, 6, 7 };
    int n = arr.Length;
 
    fibonacci(arr, n);
}
}
 
// This code is contributed by Princi Singh

Javascript




<script>
 
// Javascript program to find minimum and maximum
// fibonacci number in given array
 
// Function to create hash table
// to check Fibonacci numbers
function createHash(hash, maxElement)
{
    // Insert initial two numbers
    // in the hash table
    let prev = 0, curr = 1;
    hash.add(prev);
    hash.add(curr);
    
    while (curr <= maxElement) {
    
        // Sum of previous two numbers
        let temp = curr + prev;
    
        hash.add(temp);
    
        // Update the variable each time
        prev = curr;
        curr = temp;
    }
}
    
// Function to find minimum and maximum
// fibonacci number in given array
function fibonacci(arr, n)
{
    
    // Find maximum value in the array
    let max_val= Math.max(...arr);
    
    // Creating a set containing
    // all Fibonacci numbers up to
    // maximum value in the array
    let hash = new Set();
    createHash(hash, max_val);
    
    // For storing the Minimum
    // and Maximum Fibonacci number
    let minimum = Number.MAX_VALUE;
    let maximum = Number.MIN_VALUE;
    
    for (let i = 0; i < n; i++) {
    
        // Check if current element
        // is a fibonacci number
        if (hash.has(arr[i])) {
    
            // Update the maximum and
            // minimum accordingly
            minimum = Math.min(minimum, arr[i]);
            maximum = Math.max(maximum, arr[i]);
        }
    }
    
    document.write(minimum+ ", "
         + maximum +"<br/>");
}
 
// Driver code
     
      let arr = [ 1, 2, 3, 4, 5, 6, 7 ];
    let n = arr.length;
    
    fibonacci(arr, n);
  
 // This code is contributed by sanjoy_62.
</script>
Output: 
1, 5

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!