Split Array into subarrays of size K by filling elements

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 arrayvector<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 answervoid 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 Codeint 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 approachimport 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 arraydef 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 answerdef 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 Codeif __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 approachusing 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 zambiatek!



