Given an array nums[ ] of size N, the task is to split the array into groups of size K using the following procedure:
- The first group consists of the first K elements of the array, the second group consists of the next K element of the Array, and so on. Each element can be a part of exactly one group.
- For the last group, if the array does not have K elements remaining, use 0 to complete the group.
Examples:
Input: nums[ ] = {1,2,3,4,5,6,7,8}, K = 4
Output: [[1, 2, 3, 4] [ 5, 6, 7, 8]]
Explanation:
The first 4 element [1, 2, 3, 4] form the first group.
The next 4 elements [ 5, 6, 7, 8] form the second group.
Since all groups can be completely filled by element from the array, no need to use 0.Input: nums[ ] = {3,2,5,7,9,1,3,5,7}, K = 2
Output: [[3, 2] ,[5, 7], [9,1], [3, 5], [7, 0]]
Explanation: The last group was one short of being of size 2. So, one 0 is used.
Approach: This is an easy implementation related problem. Follow the steps mentioned below to solve the problem:
- Maintain a temp vector which represents each group in the string.
- If the index i+1 is divisible by K then it can be concluded that group has ended with this ith index.
- Push the temp into the ans vector if group ends.
- Check whether last group has a size K or not.
- If it is not equal then add K – (len+1) sized fill with 0.
Below is the implementation of the above approach:Â
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; Â
// Function to split the array vector<vector< int > > divideArray( int nums[],                                  int K, int N) {     vector<vector< int > > ans;     vector< int > temp;     for ( int i = 0; i < N; i++) {         temp.push_back(nums[i]);         if (((i+1)%K)==0) {             ans.push_back(temp);             temp.clear();         }     }      // If last group doesn't have enough     // elements then add 0 to it     if (!temp.empty()) {         int a = temp.size();         while (a != K) {             temp.push_back(0);             a++;         }         ans.push_back(temp);     }     return ans; } Â
// Function to print answer void printArray(vector<vector< int > >& a) {     int n = a.size();       cout << n;     for ( int i = 0; i < n; i++) {         cout << "[ " ;         for ( int j = 0; j < a[i].size(); j++)             cout << a[i][j] << " " ;             cout << "]" ;     } } // Driver Code int main() {     int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8 };     int N = sizeof (nums) / sizeof (nums[0]);     int K = 4;     vector<vector< int > > ans         = divideArray(nums, K, N);     printArray(ans);     return 0; } |
Java
// Java program for the above approach import java.util.ArrayList; Â
class GFG { Â
  // Function to split the array   static ArrayList<ArrayList<Integer>> divideArray( int nums[], int K, int N) {     ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();     ArrayList<Integer> temp = new ArrayList<Integer>();     for ( int i = 0 ; i < N; i++) {       temp.add(nums[i]);       if (((i + 1 ) % K) == 0 ) {         ans.add(temp);         temp = new ArrayList<Integer>();       }     }     // If last group doesn't have enough     // elements then add 0 to it     if (temp.size() != 0 ) {       int a = temp.size();       while (a != K) {         temp.add( 0 );         a++;       }       ans.add(temp);     }     return ans;   } Â
  // Function to print answer   static void printArray(ArrayList<ArrayList<Integer>> a) {     int n = a.size();     for ( int i = 0 ; i < n; i++) {       System.out.print( "[ " );       for ( int j = 0 ; j < a.get(i).size(); j++)         System.out.print(a.get(i).get(j) + " " );       System.out.print( "]" );     }   } Â
  // Driver Code   public static void main(String args[]) {     int nums[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };     int N = nums.length;     int K = 4 ;     ArrayList<ArrayList<Integer>> ans = divideArray(nums, K, N);     printArray(ans);   } } Â
// This code is contributed by saurabh_jaiswal. |
Python3
# python3 program for the above approach Â
# Function to split the array def divideArray(nums, K, N): Â
    ans = []     temp = []     for i in range ( 0 , N):         temp.append(nums[i])         if (((i + 1 ) % K) = = 0 ):             ans.append(temp.copy())             temp.clear() Â
    # If last group doesn't have enough     # elements then add 0 to it     if ( len (temp) ! = 0 ):         a = len (temp)         while (a ! = K):             temp.append( 0 )             a + = 1 Â
        ans.append(temp) Â
    return ans Â
# Function to print answer def printArray(a): Â
    n = len (a)     for i in range ( 0 , n):         print ( "[ " , end = "")         for j in range ( 0 , len (a[i])):             print (a[i][j], end = " " )         print ( "]" , end = "") Â
# Driver Code if __name__ = = "__main__" : Â
    nums = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]     N = len (nums)     K = 4     ans = divideArray(nums, K, N)     printArray(ans) Â
# This code is contributed by rakeshsahni |
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG { Â
  // Function to split the array   static List<List< int > > divideArray( int [] nums, int K,                                       int N)   {     List<List< int > > ans = new List<List< int > >();     ;     List< int > temp = new List< int >();     for ( int i = 0; i < N; i++) {       temp.Add(nums[i]);       if (((i + 1) % K) == 0) {         ans.Add(temp);         temp = new List< int >();       }     }     // If last group doesn't have enough     // elements then add 0 to it     if (temp.Count != 0) {       int a = temp.Count;       while (a != K) {         temp.Add(0);         a++;       }       ans.Add(temp);     }     return ans;   } Â
  // Function to print answer   static void printArray(List<List< int > > a)   {     int n = a.Count;     for ( int i = 0; i < n; i++) {       Console.Write( "[ " );       for ( int j = 0; j < a[i].Count; j++)         Console.Write(a[i][j] + " " );       Console.Write( "]" );     }   }      // Driver Code   public static int Main()   {     int [] nums = new int [] { 1, 2, 3, 4, 5, 6, 7, 8 };     int N = nums.Length;     int K = 4;     List<List< int > > ans = divideArray(nums, K, N);     printArray(ans);     return 0;   } } Â
// This code is contributed by Taranpreet |
Javascript
<script> Â Â Â Â Â Â Â // JavaScript code for the above approach Â
       // Function to split the array        function divideArray(nums, K, N) {            let ans = [];            let temp = [];            for (let i = 0; i < N; i++) {                temp.push(nums[i]);                if (((i + 1) % K) == 0) {                    ans.push(temp);                    temp = [];                }            }                        // If last group doesn't have enough            // elements then add 0 to it            if (temp.length != 0) {                let a = temp.length;                while (a != K) {                    temp.push(0);                    a++;                }                ans.push(temp);            }            return ans;        } Â
       // Function to print answer        function printArray(a) {            let n = a.length;            for (let i = 0; i < n; i++) {                document.write( "[ " );                for (let j = 0; j < a[i].length; j++)                    document.write(a[i][j] + " " );                document.write( "]" );            }        }                // Driver Code        let nums = [1, 2, 3, 4, 5, 6, 7, 8];        let N = nums.length;        let K = 4;        let ans = divideArray(nums, K, N);        printArray(ans); Â
        // This code is contributed by Potta Lokesh    </script> |
Â
Â
[ 1 2 3 4 ][ 5 6 7 8 ]
Â
Time Complexity: O(N)Â
Auxiliary Space: O(N)
Â
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!