Program to generate array by concatenating subarrays of another array in Python

Suppose we have one 2D array called groups, and another array nums. We have to check whether we can select n disjoint subarrays from the array nums such that the ith subarray is equal to groups[i] (0-indexed), and if i > 0, the (i-1)th subarray will appear before the ith subarray in nums.

So, if the input is like groups = [[2,-2,-2],[4,-3,0]] nums = [1,-1,0,2,-2,-2,4,-3,0], then the output will be true because array group[0] is present from index 3 to 5 of nums and group[1] is from index 6 to 8 in nums.

To solve this, we will follow these steps −

  • i := 0

  • for each grp in groups, do

    • for j in range i to size of nums - 1, do

      • if subarray of nums[from index j to j+ size of grp] is same as grp, then

        • i := j + size of grp

        • come out from the loop

      • otherwise,

        • return False

  • return True


Let us see the following implementation to get better understanding −

def solve(groups, nums):
   i = 0
   for grp in groups:
      for j in range(i, len(nums)):
         if nums[j:j+len(grp)] == grp:
            i = j + len(grp)
         return False
   return True

groups = [[2,-2,-2],[4,-3,0]]
nums = [1,-1,0,2,-2,-2,4,-3,0]
print(solve(groups, nums))


[[2,-2,-2],[4,-3,0]], [1,-1,0,2,-2,-2,4,-3,0]