Related Articles

Related Articles

Divide the array into minimum number of sub-arrays having unique elements
  • Last Updated : 24 Oct, 2019

Given an array arr. The task is to divide the array into the minimum number of subarrays containing unique elements and return the count of such subarrays.

Note: An array element cannot be present in more than one subarray.

Examples :

Input : arr[] = {1, 2, 1, 1, 2, 3}
Output : 3
Explanation : The subarrays having unique elements are 
{ 1, 2 }, { 1 }, and { 1, 2, 3 }

Input : arr[] = {1, 2, 3, 4, 5}
Output : 1
Explanation : The subarray having unique elements is 
{ 1, 2, 3, 4, 5 }

Approach:
The idea is to maintain a set while traversing the array. While traversing, if an element is already found in the set, then increase the count of subarray by 1 as we have to include the current element in the next subarray and clear the set for new subarray. Then, proceed for the complete array in a self-similar manner. The variable storing the count will be the answer.

Below is the implementation of the above approach:

C++



filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count minimum subarray having
// unique elements
#include <bits/stdc++.h>
using namespace std;
  
// Function to count minimum number of subarrays
int minimumSubarrays(int ar[], int n)
{
    set<int> se;
  
    int cnt = 1;
  
    for (int i = 0; i < n; i++) {
        // Checking if an element already exist in 
        // the current sub-array
        if (se.count(ar[i]) == 0) {
            // inserting the current element
            se.insert(ar[i]);
        }
        else {
            cnt++;
            // clear set for new possible value of subarrays
            se.clear();
            // inserting the current element
            se.insert(ar[i]);
        }
    }
  
    return cnt;
}
  
// Driver Code
int main()
{
    int ar[] = { 1, 2, 1, 3, 4, 2, 4, 4, 4 };
    int n = sizeof(ar) / sizeof(ar[0]);
    cout << minimumSubarrays(ar, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG 
{
      
    // Function to count minimum number of subarrays 
    static int minimumSubarrays(int ar[], int n) 
    
        Vector se = new Vector();
      
        int cnt = 1
      
        for (int i = 0; i < n; i++)
        
              
            // Checking if an element already exist in 
            // the current sub-array 
            if (se.contains(ar[i]) == false
            
                // inserting the current element 
                se.add(ar[i]); 
            
            else
            
                cnt++; 
                  
                // clear set for new possible value 
                // of subarrays 
                se.clear();
                  
                // inserting the current element 
                se.add(ar[i]); 
            
        
        return cnt; 
    
      
    // Driver Code 
    public static void main (String[] args)
    
        int ar[] = { 1, 2, 1, 3, 4, 2, 4, 4, 4 }; 
        int n = ar.length ;
          
        System.out.println(minimumSubarrays(ar, n)); 
    
}
  
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of the approach 
  
# Function to count minimum number of subarrays 
def minimumSubarrays(ar, n) : 
    se = [] 
  
    cnt = 1
  
    for i in range(n) :
          
        # Checking if an element already exist in 
        # the current sub-array 
        if se.count(ar[i]) == 0
              
            # inserting the current element 
            se.append(ar[i]) 
        else
            cnt += 1
              
            # clear set for new possible value 
            # of subarrays 
            se.clear() 
              
            # inserting the current element 
            se.append(ar[i]) 
    return cnt 
  
# Driver Code 
ar = [ 1, 2, 1, 3, 4, 2, 4, 4, 4
n = len(ar) 
print(minimumSubarrays(ar, n)) 
  
# This code is contributed by
# divyamohan123

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
using System.Collections.Generic;             
  
class GFG 
{
      
    // Function to count minimum number of subarrays 
    static int minimumSubarrays(int []ar, int n) 
    
        List<int> se = new List<int>();
      
        int cnt = 1; 
      
        for (int i = 0; i < n; i++)
        
              
            // Checking if an element already exist in 
            // the current sub-array 
            if (se.Contains(ar[i]) == false
            
                // inserting the current element 
                se.Add(ar[i]); 
            
            else
            
                cnt++; 
                  
                // clear set for new possible value 
                // of subarrays 
                se.Clear();
                  
                // inserting the current element 
                se.Add(ar[i]); 
            
        
        return cnt; 
    
      
    // Driver Code 
    public static void Main(String[] args)
    
        int []ar = { 1, 2, 1, 3, 4, 2, 4, 4, 4 }; 
        int n = ar.Length ;
          
        Console.WriteLine(minimumSubarrays(ar, n)); 
    
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

5

Time Complexity :  O(n*log(n))

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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :