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++
// 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; } |
Java
// 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 |
Python3
# 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 |
C#
// 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 |
5
Time Complexity :
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.