Open In App

Longest subarray in which all elements are smaller than K

Given an array arr[] consisting of N integers and an integer K, the task is to find the length of the longest subarray in which all the elements are smaller than K.

Constraints:
0 <= arr[i]  <= 10^5



Examples: 

Input: arr[] = {1, 8, 3, 5, 2, 2, 1, 13}, K = 6
Output: 5
Explanation:
There is one possible longest subarray of length 5 i.e. {3, 5, 2, 2, 1}.



Input: arr[] = {8, 12, 15, 1, 3, 9, 2, 10}, K = 10
Output: 4
Explanation:
The longest subarray is {1, 3, 9, 2}.

Naive Approach: The simplest approach is to generate all possible subarrays of the given array and print the length of the longest subarray in which all elements are less than K

Steps for implementation-

Code-




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the length of the
// longest subarray with all elements
// smaller than K
int largestSubarray(int arr[], int N,
                    int K)
{
    //If false then all element of that subarray is not smaller than k,if true then all element of that subarray is smaller than k
    bool temp;
 
    // Stores maximum length of subarray
    int ans = 0;
     
    //stores length of subarray
    int count;
     
    for(int i=0;i<N;i++){
        temp=true;
        count=0;
        for(int j=i;j<N;j++){
          count++;
          if(arr[j]>=K){temp=false;}
           
          //Update ans variable
          if(temp==true){
              ans=max(ans,count);
          }
        }
    }
     
    //Print the maximum length
    cout<<ans<<endl;
 
}
 
// Driver Code
int main()
{
    // Given array arr[]
    int arr[] = { 1, 8, 3, 5, 2, 2, 1, 13 };
 
    // Size of the array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Given K
    int K = 6;
 
    // Function Call
    largestSubarray(arr, N, K);
 
    return 0;
}




import java.util.*;
 
public class Main {
    // Function to find the length of the
    // longest subarray with all elements
    // smaller than K
    public static int largestSubarray(int[] arr, int N,
                                      int K)
    {
        // If false then all element of that subarray is not
        // smaller than k, if true then all element of that
        // subarray is smaller than k
        boolean temp;
 
        // Stores maximum length of subarray
        int ans = 0;
 
        // stores length of subarray
        int count;
 
        for (int i = 0; i < N; i++) {
            temp = true;
            count = 0;
            for (int j = i; j < N; j++) {
                count++;
                if (arr[j] >= K) {
                    temp = false;
                }
 
                // Update ans variable
                if (temp == true) {
                    ans = Math.max(ans, count);
                }
            }
        }
 
        // Print the maximum length
        System.out.println(ans);
        return ans;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        // Given array arr[]
        int[] arr = { 1, 8, 3, 5, 2, 2, 1, 13 };
 
        // Size of the array
        int N = arr.length;
 
        // Given K
        int K = 6;
 
        // Function Call
        largestSubarray(arr, N, K);
    }
}




def largestSubarray(arr, N, K):
    # If false then all element of that subarray is not smaller than k,
    # if true then all element of that subarray is smaller than k
    temp = True
    # Stores maximum length of subarray
    ans = 0
    # stores length of subarray
    count = 0
    for i in range(N):
        temp = True
        count = 0
        for j in range(i, N):
            count += 1
            if arr[j] >= K:
                temp = False
            # Update ans variable
            if temp == True:
                ans = max(ans, count)
    # Print the maximum length
    print(ans)
 
 
arr = [1, 8, 3, 5, 2, 2, 1, 13]
N = len(arr)
K = 6
 
largestSubarray(arr, N, K)




// C# program for the above approach
using System;
 
class GFG
{
    // Function to find the length of the
    // longest subarray with all elements
    // smaller than K
    static int LargestSubarray(int[] arr, int N, int K)
    {
        // If false then all elements of that subarray are not smaller than K,
        // if true then all elements of that subarray are smaller than K
        bool temp;
 
        // Stores the maximum length of the subarray
        int ans = 0;
 
        // Stores the length of the subarray
        int count;
 
        for (int i = 0; i < N; i++)
        {
            temp = true;
            count = 0;
 
            for (int j = i; j < N; j++)
            {
                count++;
                if (arr[j] >= K)
                {
                    temp = false;
                }
 
                // Update ans variable
                if (temp == true)
                {
                    ans = Math.Max(ans, count);
                }
            }
        }
 
        return ans;
    }
 
    // Driver Code
    static void Main()
    {
        // Given array arr[]
        int[] arr = { 1, 8, 3, 5, 2, 2, 1, 13 };
 
        // Size of the array
        int N = arr.Length;
 
        // Given K
        int K = 6;
 
        // Function Call
        int result = LargestSubarray(arr, N, K);
 
        // Print the maximum length
        Console.WriteLine(result);
    }
}




// Function to find the length of the
// longest subarray with all elements
// smaller than K
function largestSubarray(arr, N, K) {
  // If false then all element of that subarray is not smaller than k,
  // if true then all element of that subarray is smaller than k
  let temp;
 
  // Stores maximum length of subarray
  let ans = 0;
 
  // stores length of subarray
  let count;
 
  for (let i = 0; i < N; i++) {
    temp = true;
    count = 0;
    for (let j = i; j < N; j++) {
      count++;
      if (arr[j] >= K) {
        temp = false;
      }
 
      // Update ans variable
      if (temp == true) {
        ans = Math.max(ans, count);
      }
    }
  }
 
  // Print the maximum length
  console.log(ans);
}
 
// Given array arr[]
let arr = [1, 8, 3, 5, 2, 2, 1, 13];
 
// Size of the array
let N = arr.length;
 
// Given K
let K = 6;
 
// Function Call
largestSubarray(arr, N, K);

Output-

5

Time Complexity: O(N2), because we have two nested loops to find all subarrays
Auxiliary Space: O(1), because no extra space has been used

Efficient Approach: To optimize the above approach, the idea is to traverse the array and count consecutive array elements smaller than K. Print the maximum count obtained. Follow the steps below to solve the problem:

Below is the implementation of the above approach: 




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the length of the
// longest subarray with all elements
// smaller than K
int largestSubarray(int arr[], int N,
                    int K)
{
    // Stores the length of maximum
    // consecutive sequence
    int count = 0;
 
    // Stores maximum length of subarray
    int len = 0;
 
    // Iterate through the array
    for (int i = 0; i < N; i++) {
 
        // Check if array element
        // smaller than K
        if (arr[i] < K) {
            count += 1;
        }
        else {
 
            // Store the maximum
            // of length and count
            len = max(len, count);
 
            // Reset the counter
            count = 0;
        }
    }
 
    if (count) {
        len = max(len, count);
    }
 
    // Print the maximum length
    cout << len;
}
 
// Driver Code
int main()
{
    // Given array arr[]
    int arr[] = { 1, 8, 3, 5, 2, 2, 1, 13 };
 
    // Size of the array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Given K
    int K = 6;
 
    // Function Call
    largestSubarray(arr, N, K);
 
    return 0;
}




// Java program for the above approach
import java.util.*;
 
class GFG{
     
// Function to find the length of the
// longest subarray with all elements
// smaller than K
static void largestSubarray(int[] arr, int N,
                            int K)
{
     
    // Stores the length of maximum
    // consecutive sequence
    int count = 0;
  
    // Stores maximum length of subarray
    int len = 0;
  
    // Iterate through the array
    for(int i = 0; i < N; i++)
    {
         
        // Check if array element
        // smaller than K
        if (arr[i] < K)
        {
            count += 1;
        }
        else
        {
             
            // Store the maximum
            // of length and count
            len = Math.max(len, count);
             
            // Reset the counter
            count = 0;
        }
    }
  
    if (count != 0)
    {
        len = Math.max(len, count);
    }
  
    // Print the maximum length
    System.out.println(len);
}
 
// Driver code
public static void main(String[] args)
{
     
    // Given array arr[]
    int[] arr = { 1, 8, 3, 5, 2, 2, 1, 13 };
  
    // Size of the array
    int N = arr.length;
  
    // Given K
    int K = 6;
  
    // Function Call
    largestSubarray(arr, N, K);
}
}
 
// This code is contributed by chitranayal




# Python3 program for the above approach
 
# Function to find the length of the
# longest subarray with all elements
# smaller than K
def largestSubarray(arr, N, K):
     
    # Stores the length of maximum
    # consecutive sequence
    count = 0
 
    # Stores maximum length of subarray
    length = 0
 
    # Iterate through the array
    for i in range(N):
       
      # Check if array element
      # smaller than K
      if (arr[i] < K):
        count += 1
      else:
         
        # Store the maximum
        # of length and count
        length = max(length, count)
 
        # Reset the counter
        count = 0
 
    if (count):
        length = max(length, count)
 
    # Print the maximum length
    print(length, end = "")
 
# Driver Code
if __name__ == "__main__" :
 
    # Given array arr[]
    arr = [ 1, 8, 3, 5, 2, 2, 1, 13 ]
 
    # Size of the array
    N = len(arr)
 
    # Given K
    K = 6
 
    # Function Call
    largestSubarray(arr, N, K)
 
# This code is contributed by AnkitRai01




// C# program for the above approach
using System;
class GFG {
     
    // Function to find the length of the
    // longest subarray with all elements
    // smaller than K
    static void largestSubarray(int[] arr, int N, int K)
    {
       
        // Stores the length of maximum
        // consecutive sequence
        int count = 0;
      
        // Stores maximum length of subarray
        int len = 0;
      
        // Iterate through the array
        for (int i = 0; i < N; i++)
        {
      
            // Check if array element
            // smaller than K
            if (arr[i] < K)
            {
                count += 1;
            }
            else
            {
      
                // Store the maximum
                // of length and count
                len = Math.Max(len, count);
      
                // Reset the counter
                count = 0;
            }
        }
      
        if (count != 0)
        {
            len = Math.Max(len, count);
        }
      
        // Print the maximum length
        Console.WriteLine(len);
    }
   
  // Driver code
  static void Main()
  {
     
        // Given array arr[]
        int[] arr = { 1, 8, 3, 5, 2, 2, 1, 13 };
      
        // Size of the array
        int N = arr.Length;
      
        // Given K
        int K = 6;
      
        // Function Call
        largestSubarray(arr, N, K);
  }
}
 
// This code is contributed by diveshrabadiya07




<script>
// javascript program to implement
// the above approach
 
// Function to find the length of the
// longest subarray with all elements
// smaller than K
function largestSubarray(arr, N,
                            K)
{
      
    // Stores the length of maximum
    // consecutive sequence
    let count = 0;
   
    // Stores maximum length of subarray
    let len = 0;
   
    // Iterate through the array
    for(let i = 0; i < N; i++)
    {
          
        // Check if array element
        // smaller than K
        if (arr[i] < K)
        {
            count += 1;
        }
        else
        {
              
            // Store the maximum
            // of length and count
            len = Math.max(len, count);
              
            // Reset the counter
            count = 0;
        }
    }
   
    if (count != 0)
    {
        len = Math.max(len, count);
    }
   
    // Print the maximum length
    document.write(len);
}
 
// Driver code
 
    // Given array arr[]
    let arr = [ 1, 8, 3, 5, 2, 2, 1, 13 ];
   
    // Size of the array
    let N = arr.length;
   
    // Given K
    let K = 6;
   
    // Function Call
    largestSubarray(arr, N, K);
     
    // This code is contributed by target_2.
</script>

Output
5

Time Complexity: O(N)
Auxiliary Space: O(1)

Related Topic: Subarrays, Subsequences, and Subsets in Array


Article Tags :