Subarreglo más largo en el que todos los elementos son más pequeños que K

Dado un arreglo arr[] que consta de N enteros y un entero K , la tarea es encontrar la longitud del subarreglo más largo en el que todos los elementos son más pequeños que K .

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

Ejemplos: 

Entrada: arr[] = {1, 8, 3, 5, 2, 2, 1, 13}, K = 6
Salida: 5
Explicación:
Hay un subarreglo más largo posible de longitud 5, es decir, {3, 5, 2, 2 , 1}.

Entrada: arr[] = {8, 12, 15, 1, 3, 9, 2, 10}, K = 10
Salida: 4
Explicación:
El subarreglo más largo es {1, 3, 9, 2}.

Enfoque ingenuo: el enfoque más simple es generar todos los subarreglos posibles del arreglo dado e imprimir la longitud del subarreglo más largo en el que todos los elementos son menores que K

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Enfoque eficiente: para optimizar el enfoque anterior, la idea es atravesar la array y contar los elementos consecutivos de la array más pequeños que K . Imprime el conteo máximo obtenido. Siga los pasos a continuación para resolver el problema:

  • Inicialice dos variables count y C para almacenar la longitud máxima del subarreglo que tiene todos los elementos menores que K y la longitud del subarreglo actual con todos los elementos menores que K , respectivamente.
  • Recorra la array dada y realice los siguientes pasos:
    • Si el elemento actual es menor que K , entonces incremente C .
    • De lo contrario, actualice el valor de count al máximo de count y C y restablezca C a 0 .
  • Después de completar los pasos anteriores, imprima el valor de conteo como resultado.

A continuación se muestra la implementación del enfoque anterior: 

C++

// 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

// 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

# 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#

// 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

Javascript

<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>
Producción: 

5

 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Tema relacionado: Subarrays, subsecuencias y subconjuntos en array

Publicación traducida automáticamente

Artículo escrito por patelajeet y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *