longest subarray with consecutive elements code example

Example 1: find longest subarray by sum

def max_length(s, k):
    current = []
    max_len = -1 # returns -1 if there is no subsequence that adds up to k.
    for i in s:
        current.append(i)
        while sum(current) > k: # Shrink the array from the left, until the sum is <= k.
           current = current[1:]
        if sum(current) == k:
            max_len = max(max_len, len(current))

    return max_len

Example 2: Find largest sub-array formed by consecutive integers

def isConsecutive(A, i, j, min, max):
 
    # for a list to contain consecutive integers, the difference
    # between the maximum and minimum element in it should be exactly `j-i`
    if max - min != j - i:
        return False
 
    # create a visited list (we can also use a set)
    visited = [False] * (j - i + 1)
 
    # traverse the sublist and check if each element appears
    # only once
    for k in range(i, j + 1):
 
        # if the element is seen before, return false
        if visited[A[k] - min]:
            return False
 
        # mark the element as seen
        visited[A[k] - min] = True
 
    # we reach here when all elements in the list are distinct
    return True
 
 
# Find the largest sublist formed by consecutive integers
def findMaxSublist(A):
 
    length = 1
    start = end = 0
 
    # consider each sublist formed by `A[i…j]`
 
    # `i` denotes the beginning of the sublist
    for i in range(len(A) - 1):
 
        # stores the minimum and maximum element formed by `A[i…j]`
        min_val = A[i]
        max_val = A[i]
 
        # `j` denotes the end of the sublist
        for j in range(i + 1, len(A)):
            # update the minimum and maximum elements of the sublist
            min_val = min(min_val, A[j])
            max_val = max(max_val, A[j])
 
            # check if `A[i…j]`is formed by consecutive integers
            if isConsecutive(A, i, j, min_val, max_val):
                if length < max_val - min_val + 1:
                    length = max_val - min_val + 1
                    start = i
                    end = j
 
    # print the maximum length sublist
    print("The largest sublist is", (start, end))

Tags:

Misc Example