Minimum array element changes to make its elements 1 to N
Suppose you are given an array with N elements with any integer values. You need to find the minimum number of elements of the array which must be changed so that array has all integer values between 1 and N(including 1, N).
Examples:
Input : arr[] = {1 4 5 3 7} Output : 1 We need to replace 7 with 2 to satisfy condition hence minimum changes is 1. Input : arr[] = {8 55 22 1 3 22 4 5} Output :3
We insert all elements in a hash table. We then iterate from 1 to N and check whether the element is present in the hash table. If it is not present than increment count. The final value of count will be the minimum changes required.
C++
// Count minimum changes to make array // from 1 to n #include <bits/stdc++.h> using namespace std; int countChanges( int arr[], int n) { // it will contain all initial elements // of array for log(n) complexity searching unordered_set< int > s; // Inserting all elements in a hash table for ( int i = 0; i < n; i++) s.insert(arr[i]); // Finding elements to be changed int count = 0; for ( int i = 1; i <= n; i++) if (s.find(i) == s.end()) count++; return count; } int main() { int arr[] = {8, 55, 22, 1, 3, 22, 4, 5}; int n = sizeof (arr)/ sizeof (arr[0]); cout << countChanges(arr, n); return 0; } |
Java
// Count minimum changes to // make array from 1 to n import java.util.Set; import java.util.HashSet; class GfG { static int countChanges( int arr[], int n) { // It will contain all initial elements // of array for log(n) complexity searching Set<Integer> s = new HashSet<>(); // Inserting all elements in a hash table for ( int i = 0 ; i < n; i++) s.add(arr[i]); // Finding elements to be changed int count = 0 ; for ( int i = 1 ; i <= n; i++) if (!s.contains(i)) count++; return count; } // Driver code public static void main(String []args) { int arr[] = { 8 , 55 , 22 , 1 , 3 , 22 , 4 , 5 }; int n = arr.length; System.out.println(countChanges(arr, n)); } } // This code is contributed by Rituraj Jain |
Python 3
# Count minimum changes to # make array from 1 to n def countChanges(arr, n): # it will contain all initial # elements of array for log(n) # complexity searching s = [] # Inserting all elements in a list for i in range (n): s.append(arr[i]) # Finding elements to be changed count = 0 for i in range ( 1 , n + 1 ) : if i not in s: count + = 1 return count # Driver Code if __name__ = = "__main__" : arr = [ 8 , 55 , 22 , 1 , 3 , 22 , 4 , 5 ] n = len (arr) print (countChanges(arr, n)) # This code is contributed # by ChitraNayal |
C#
// C# program to Count minimum changes to // make array from 1 to n using System; using System.Collections.Generic; class GfG { static int countChanges( int []arr, int n) { // It will contain all initial elements // of array for log(n) complexity searching HashSet< int > s = new HashSet< int >(); // Inserting all elements in a hash table for ( int i = 0; i < n; i++) s.Add(arr[i]); // Finding elements to be changed int count = 0; for ( int i = 1; i <= n; i++) if (!s.Contains(i)) count++; return count; } // Driver code public static void Main(String []args) { int []arr = {8, 55, 22, 1, 3, 22, 4, 5}; int n = arr.Length; Console.WriteLine(countChanges(arr, n)); } } // This code is contributed by 29AjayKumar |
PHP
<?php // Count minimum changes to // make array from 1 to n function countChanges(& $arr , $n ) { // it will contain all initial // elements of array for log(n) // complexity searching $s = array (); // Inserting all elements // in an array for ( $i = 0; $i < $n ; $i ++) array_push ( $s , $arr [ $i ]); // Finding elements to be changed $count = 0; for ( $i = 1; $i <= $n ; $i ++) if (!in_array( $i , $s )) $count ++; return $count ; } // Driver Code $arr = array (8, 55, 22, 1, 3, 22, 4, 5); $n = sizeof( $arr ); echo countChanges( $arr , $n ); // This code is contributed // by ChitraNayal ?> |
Javascript
<script> // Count minimum changes to // make array from 1 to n function countChanges(arr,n) { // It will contain all initial elements // of array for log(n) complexity searching let s = new Set(); // Inserting all elements in a hash table for (let i = 0; i < n; i++) s.add(arr[i]); // Finding elements to be changed let count = 0; for (let i = 1; i <= n; i++) if (!s.has(i)) count++; return count; } // Driver code let arr=[8, 55, 22, 1, 3, 22, 4, 5]; let n = arr.length; document.write(countChanges(arr, n)); // This code is contributed by rag2127 </script> |
Output:
3
Time Complexity: O(n)
Auxiliary Space: O(n)