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.



filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>
chevron_right

Output:
3

Time Complexity: O(n)
Auxiliary Space: O(n)




Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Article Tags :
Practice Tags :