Cuente las secuencias aritméticas en la array de tamaño al menos 3

Dada una array arr[] de tamaño N , la tarea es encontrar el recuento de todas las secuencias aritméticas de la array. 

Ejemplos: 

Entrada: arr = [1, 2, 3, 4] 
Salida:
Explicación: 
Las secuencias aritméticas en arr son [1, 2, 3], [2, 3, 4] y [1, 2, 3, 4] en sí mismo .

Entrada: arr = [1, 3, 5, 6, 7, 8] 
Salida:
Explicación: 
Las secuencias aritméticas en arr son [1, 3, 5], [5, 6, 7], [5, 6, 7 , 8] y [6, 7, 8].

Enfoque ingenuo:  

  • Ejecute dos bucles y verifique que cada secuencia tenga una longitud de al menos 3.
  • Si la sucesión es una sucesión aritmética , incrementa la respuesta en 1.
  • Finalmente, devuelva el recuento de todos los subarreglos aritméticos de tamaño al menos 3.

Complejidad del tiempo: O(N 2 )

Enfoque eficiente: Usaremos un enfoque de programación dinámica para mantener un conteo de todas las secuencias aritméticas hasta cualquier posición.  

  • Inicializa una variable, res con 0 . Almacenará el recuento de secuencias.
  • Inicializa una variable, cuenta con 0 . Almacenará el tamaño de la secuencia menos 2.
  • Aumente el valor de conteo si el elemento actual forma una secuencia aritmética; de lo contrario, hágalo cero.
  • Si el elemento actual L[i] está haciendo una secuencia aritmética con L[i-1] y L[i-2], entonces el número de secuencias aritméticas hasta la i-ésima iteración está dado por: 

res = res + cuenta

  • Finalmente, devuelve la variable res .

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

C++

// C++ program to find all arithmetic
// sequences of size atleast 3
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find all arithmetic
// sequences of size atleast 3
int numberOfArithmeticSequences(int L[], int N)
{
 
    // If array size is less than 3
    if (N <= 2)
        return 0;
 
    // Finding arithmetic subarray length
    int count = 0;
 
    // To store all arithmetic subarray
    // of length at least 3
    int res = 0;
 
    for (int i = 2; i < N; ++i) {
 
        // Check if current element makes
        // arithmetic sequence with
        // previous two elements
        if (L[i] - L[i - 1] == L[i - 1] - L[i - 2]) {
            ++count;
        }
 
        // Begin with a new element for
        // new arithmetic sequences
        else {
            count = 0;
        }
 
        // Accumulate result in till i.
        res += count;
    }
 
    // Return final count
    return res;
}
 
// Driver code
int main()
{
 
    int L[] = { 1, 3, 5, 6, 7, 8 };
    int N = sizeof(L) / sizeof(L[0]);
 
    // Function to find arithmetic sequences
    cout << numberOfArithmeticSequences(L, N);
 
    return 0;
}

Java

// Java program to find all arithmetic
// sequences of size atleast 3
 
class GFG{
  
// Function to find all arithmetic
// sequences of size atleast 3
static int numberOfArithmeticSequences(int L[], int N)
{
  
    // If array size is less than 3
    if (N <= 2)
        return 0;
  
    // Finding arithmetic subarray length
    int count = 0;
  
    // To store all arithmetic subarray
    // of length at least 3
    int res = 0;
  
    for (int i = 2; i < N; ++i) {
 
        // Check if current element makes
        // arithmetic sequence with
        // previous two elements
        if (L[i] - L[i - 1] == L[i - 1] - L[i - 2]) {
            ++count;
        }
  
        // Begin with a new element for
        // new arithmetic sequences
        else {
            count = 0;
        }
  
        // Accumulate result in till i.
        res += count;
    }
  
    // Return final count
    return res;
}
  
// Driver code
public static void main(String[] args)
{
  
    int L[] = { 1, 3, 5, 6, 7, 8 };
    int N = L.length;
  
    // Function to find arithmetic sequences
    System.out.print(numberOfArithmeticSequences(L, N));
  
}
}
 
// This code contributed by sapnasingh4991

Python3

# Python3 program to find all arithmetic
# sequences of size atleast 3
 
# Function to find all arithmetic
# sequences of size atleast 3
def numberOfArithmeticSequences(L, N) :
 
    # If array size is less than 3
    if (N <= 2) :
        return 0
 
    # Finding arithmetic subarray length
    count = 0
 
    # To store all arithmetic subarray
    # of length at least 3
    res = 0
 
    for i in range(2,N):
 
        # Check if current element makes
        # arithmetic sequence with
        # previous two elements
        if ( (L[i] - L[i - 1]) == (L[i - 1] - L[i - 2])) :
            count += 1
 
        # Begin with a new element for
        # new arithmetic sequences
        else :
            count = 0
 
        # Accumulate result in till i.
        res += count
 
 
    # Return final count
    return res
 
# Driver code
 
L = [ 1, 3, 5, 6, 7, 8 ]
N = len(L)
 
# Function to find arithmetic sequences
print(numberOfArithmeticSequences(L, N))
 
# This code is contributed by Sanjit_Prasad

C#

// C# program to find all arithmetic
// sequences of size atleast 3
using System;
 
class GFG{
 
// Function to find all arithmetic
// sequences of size atleast 3
static int numberOfArithmeticSequences(int []L,
                                       int N)
{
 
    // If array size is less than 3
    if (N <= 2)
        return 0;
 
    // Finding arithmetic subarray length
    int count = 0;
 
    // To store all arithmetic subarray
    // of length at least 3
    int res = 0;
 
    for(int i = 2; i < N; ++i)
    {
         
       // Check if current element makes
       // arithmetic sequence with
       // previous two elements
       if (L[i] - L[i - 1] ==
           L[i - 1] - L[i - 2])
       {
           ++count;
       }
        
       // Begin with a new element for
       // new arithmetic sequences
       else
       {
           count = 0;
       }
        
       // Accumulate result in till i.
       res += count;
    }
     
    // Return readonly count
    return res;
}
 
// Driver code
public static void Main(String[] args)
{
    int []L = { 1, 3, 5, 6, 7, 8 };
    int N = L.Length;
 
    // Function to find arithmetic sequences
    Console.Write(numberOfArithmeticSequences(L, N));
}
}
 
// This code is contributed by amal kumar choubey

Javascript

<script>
//Javascript program to find all arithmetic
// sequences of size atleast 3
 
 // Function to find all arithmetic
// sequences of size atleast 3
function numberOfArithmeticSequences( L, N)
{
 
    // If array size is less than 3
    if (N <= 2)
        return 0;
 
    // Finding arithmetic subarray length
    var count = 0;
 
    // To store all arithmetic subarray
    // of length at least 3
    var res = 0;
 
    for (var i = 2; i < N; ++i) {
 
        // Check if current element makes
        // arithmetic sequence with
        // previous two elements
        if (L[i] - L[i - 1] == L[i - 1] - L[i - 2]) {
            ++count;
        }
 
        // Begin with a new element for
        // new arithmetic sequences
        else {
            count = 0;
        }
 
        // Accumulate result in till i.
        res += count;
    }
 
    // Return final count
    return res;
}
 
var L = [ 1, 3, 5, 6, 7, 8 ];
    var N = L.length;
 
// Function to find arithmetic sequences
 document.write(numberOfArithmeticSequences(L, N));
   
  // This code contributed by SoumikMondal
</script>
Producción: 

4

 

Complejidad de tiempo: O(N)
 

Publicación traducida automáticamente

Artículo escrito por Sanjit_Prasad 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 *