Print all subarrays of a given array

Question:

Given an array write an algorithm to print all the possible sub arrays. The first line of input contains an integer T denoting the number of test cases. Then T test cases follow. Each test case contains an integer N denoting the size of the array A. Then in the next lines are N space separated values representing the array A. Print each sub-array element on a new-line.

t = int(input())
for z in range(t):
    n = int(input()) 
    a = list(map(int, input().split()))  

    for i in range(n):
        for j in range(i,n+1):
            for k in range(i,j):
                print(a[k], end=" ")
            print()

Sample Input

1
3
1 2 3 

Sample Output

1 
1 2 
1 2 3 
2 
2 3 
3

I’ve tried everything best I can do.

Asked By: Aditya Nair

||

Answers:

(try this) You can get and print all subsets of an array by the next:

In array A at every step, we have two choices for each element either we can ignore the element or we can include the element in our subset.

function


def subsetsUtil(A, subset, index):
    print(*subset)
    for i in range(index, len(A)): 
        
        # include the A[i] in subset. 
        subset.append(A[i])
        
        # move onto the next element. 
        subsetsUtil(A, subset, i + 1) 
        
        # exclude the A[i] from subset and 
        # triggers backtracking.
        subset.pop(-1) 
    return

below function returns the subsets of vector A.

def subsets(A):
    global res
    subset = []
    
    # keeps track of current element in vector A 
    index = 0
    subsetsUtil(A, subset, index) 

Implement the array and call the function

array = [1, 2, 3]
subsets(array) 

-> res will store all subsets.

Time complexity

O(2 ^ (number of elements inside array))

–> because at every step we have two choices either include or ignore.

Answered By: Hammam Abo Jamous

If your issue is that you have empty lines, simplify your code to directly slice the list will all needed items.

You can use unpacking in print to have space separated elements by default.

t = int(input())
for z in range(t):
    n = int(input()) 
    a = list(map(int, input().split()))  

    for i in range(n):
        for j in range(i+1,n+1):
            print(*a[i:j])

input/ouput:

1
3
1 2 3  # end of input
1
1 2
1 2 3
2
2 3
3
Answered By: mozway

Instead of what you have done, you can go through a simple and general way like this:

a = input().split()

for i in range(len(a)):
    for j in range(len(a)):
        if j>=i:
            print(*a[i:j+1])

Output:

1
1 2
1 2 3
2
2 3
3
Answered By: Mohammad Khoshbin

Try the following:

t = int(input())
for z in range(t):
    n = int(input()) 
    a = []
    for y in range(n):
        x = int(input())
        a.append(x) 

    for i in range(n):
        for j in range(i,n+1):
            for k in range(i,j):
                print(a[k], end=" ")
            print()
Answered By: Sanskar Agarwal

The code is another version of the answer given with basic syntax

for i in range(int(input())):#no of testcases eg:1
  n=int(input())#no of input eg:3
  x=list(map(int,input().split()))#values in the input eg:1 2 3
  l=[]
  for j in range(n):
    for k in range(j,n):
      l.append(x[k])
      print(*l)
    l=[]

Output:

1
3
1 2 3
1
1 2
1 2 3
2
2 3
3
Answered By: Vinayagam Murthi
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.