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: 3
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: 4
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>
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