# 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 ``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);` `    ``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 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 hash = ``new` `HashSet();``    ``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

 ``
Output:
`1, 5`

My Personal Notes arrow_drop_up