Minimum number of elements to be replaced to make the given array a Fibonacci Sequence
Given an array arr containing N integer elements, the task is to count the minimum number of elements that need to be changed such that all the elements (after proper rearrangement) make first N terms of Fibonacci Series.
Examples:
Input: arr[] = {4, 1, 2, 1, 3, 7}
Output: 2
4 and 7 must be changed to 5 and 8 to make first N(6) terms of Fibonacci series.Input: arr[] = {5, 3, 1, 1, 2, 8, 11}
Output: 1
11 must be changed to 13.
Approach:
- Insert first N elements of Fibonacci series into a multi set.
- Then, traverse the array from left to right and check if the current element is present in multi set.
- If element is present in the multi set then remove it.
- Final answer will be the size of final multi set.
Below is the implementation of the above approach:
C++
// C++ program to find the minimum number // of elements the need to be changed // to get first N numbers of Fibonacci series #include <bits/stdc++.h> using namespace std; // Function that finds minimum changes required int fibonacciArray( int arr[], int n) { multiset< int > s; // a and b are first two // fibonacci numbers int a = 1, b = 1; int c; // insert first n fibonacci elements to set s.insert(a); if (n >= 2) s.insert(b); for ( int i = 0; i < n - 2; i++) { c = a + b; s.insert(c); a = b; b = c; } multiset< int >::iterator it; for ( int i = 0; i < n; i++) { // if fibonacci element is present // in the array then remove it from set it = s.find(arr[i]); if (it != s.end()) s.erase(it); } // return the remaining number of // elements in the set return s.size(); } // Driver code int main() { int arr[] = { 3, 1, 21, 4, 2, 1, 8, 9 }; int n = sizeof (arr) / sizeof (arr[0]); cout << fibonacciArray(arr, n); return 0; } |
Java
// Java program to find the minimum number // of elements the need to be changed // to get first N numbers of Fibonacci series import java.util.*; class geeks { // Function that finds minimum changes required public static int fibonacciArray( int [] arr, int n) { Set<Integer> s = new HashSet<Integer>(); // a and b are first two // fibonacci numbers int a = 1 , b = 1 ; int c; // insert first n fibonacci elements to set s.add(a); if (n > 2 ) s.add(b); for ( int i = 0 ; i < n - 2 ; i++) { c = a + b; s.add(c); a = b; b = c; } for ( int i = 0 ; i < n; i++) { // if fibonacci element is present // in the array then remove it from set if (s.contains(arr[i])) s.remove(arr[i]); } // return the remaining number of // elements in the set return s.size(); } // Driver Code public static void main(String[] args) { int [] arr = { 3 , 1 , 21 , 4 , 2 , 1 , 8 , 9 }; int n = arr.length; System.out.print(fibonacciArray(arr, n)); } } // This code is contributed by // sanjeev2552 |
Python3
# Python3 program to find the minimum number # of elements the need to be changed # to get first N numbers of Fibonacci series # Function that finds minimum changes required def fibonacciArray(arr, n): s = set () # a and b are first two # fibonacci numbers a, b = 1 , 1 # insert first n fibonacci elements to set s.add(a) if n > = 2 : s.add(b) for i in range ( 0 , n - 2 ): c = a + b s.add(c) a, b = b, c for i in range ( 0 , n): # if fibonacci element is present in # the array then remove it from set if arr[i] in s: s.remove(arr[i]) # return the remaining number # of elements in the set return len (s) # Driver code if __name__ = = "__main__" : arr = [ 3 , 1 , 21 , 4 , 2 , 1 , 8 , 9 ] n = len (arr) print (fibonacciArray(arr, n)) # This code is contributed by Rituraj Jain |
C#
// C# program to find the minimum number // of elements the need to be changed // to get first N numbers of Fibonacci series using System; using System.Collections.Generic; public class geeks { // Function that finds minimum changes required public static int fibonacciArray( int [] arr, int n) { HashSet< int > s = new HashSet< int >(); // a and b are first two // fibonacci numbers int a = 1, b = 1; int c; // insert first n fibonacci elements to set s.Add(a); if (n > 2) s.Add(b); for ( int i = 0; i < n - 2; i++) { c = a + b; s.Add(c); a = b; b = c; } for ( int i = 0; i < n; i++) { // if fibonacci element is present // in the array then remove it from set if (s.Contains(arr[i])) s.Remove(arr[i]); } // return the remaining number of // elements in the set return s.Count; } // Driver Code public static void Main(String[] args) { int [] arr = { 3, 1, 21, 4, 2, 1, 8, 9 }; int n = arr.Length; Console.WriteLine(fibonacciArray(arr, n)); } } // This code is contributed by Rajput-Ji |
Javascript
<script> // Javascript program to find the minimum number // of elements the need to be changed // to get first N numbers of Fibonacci series // Function that finds minimum changes required function fibonacciArray(arr, n) { let s = new Set(); // a and b are first two // fibonacci numbers let a = 1, b = 1; let c; // insert first n fibonacci elements to set s.add(a); if (n > 2) s.add(b); for (let i = 0; i < n - 2; i++) { c = a + b; s.add(c); a = b; b = c; } for (let i = 0; i < n; i++) { // if fibonacci element is present // in the array then remove it from set if (s.has(arr[i])) s. delete (arr[i]); } // return the remaining number of // elements in the set return s.size; } // Driver Code let arr = [3, 1, 21, 4, 2, 1, 8, 9]; let n = arr.length; document.write(fibonacciArray(arr, n)); // This code is contributed by _saurabh_jaiswal </script> |
Output
2
Please Login to comment...