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
Example
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) break else: 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))
Input
[[2,-2,-2],[4,-3,0]], [1,-1,0,2,-2,-2,4,-3,0]
Output
True