Dado un arreglo arr[] , la tarea es encontrar la longitud de la subsecuencia más larga del arreglo arr[] tal que todos los elementos adyacentes en la subsecuencia sean diferentes.
Ejemplos:
Entrada: arr[] = {4, 2, 3, 4, 3}
Salida: 5
Explicación:
La subsecuencia más larga donde no hay dos elementos adyacentes iguales es {4, 2, 3, 4, 3}. La longitud de la subsecuencia es 5.Entrada: arr[] = {7, 8, 1, 2, 2, 5, 5, 1}
Salida: 6
Explicación: la subsecuencia más larga donde no hay dos elementos adyacentes iguales es {7, 8, 1, 2, 5, 1 }. La longitud de la subsecuencia es 5.
Enfoque ingenuo: el enfoque más simple es generar todas las subsecuencias posibles de la array dada e imprimir la longitud máxima de esa subsecuencia con todos los elementos adyacentes diferentes.
Complejidad temporal: O(2 N )
Espacio auxiliar: O(1)
Enfoque eficiente: siga los pasos a continuación para resolver el problema:
- Inicialice count a 1 para almacenar la longitud de la subsecuencia más larga .
- Recorra la array sobre los índices [1, N – 1] y para cada elemento, verifique si el elemento actual es igual al elemento anterior o no. Si se encuentra que no es igual, entonces incremente el conteo en 1 .
- Después de completar los pasos anteriores, imprima el valor de count como la longitud máxima posible de la subsecuencia.
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 that finds the length of // longest subsequence having different // adjacent elements void longestSubsequence(int arr[], int N) { // Stores the length of the // longest subsequence int count = 1; // Traverse the array for (int i = 1; i < N; i++) { // If previous and current // element are not same if (arr[i] != arr[i - 1]) { // Increment the count count++; } } // Print the maximum length cout << count << endl; } // Driver Code int main() { int arr[] = { 7, 8, 1, 2, 2, 5, 5, 1 }; // Size of Array int N = sizeof(arr) / sizeof(arr[0]); // Function Call longestSubsequence(arr, N); return 0; }
Java
// Java program for the // above approach import java.util.*; class GFG{ // Function that finds the length of // longest subsequence having different // adjacent elements static void longestSubsequence(int arr[], int N) { // Stores the length of the // longest subsequence int count = 1; // Traverse the array for (int i = 1; i < N; i++) { // If previous and current // element are not same if (arr[i] != arr[i - 1]) { // Increment the count count++; } } // Print the maximum length System.out.println(count); } // Driver Code public static void main(String args[]) { int arr[] = {7, 8, 1, 2, 2, 5, 5, 1}; // Size of Array int N = arr.length; // Function Call longestSubsequence(arr, N); } } // This code is contributed by bgangwar59
Python3
# Python3 program for the above approach # Function that finds the length of # longest subsequence having different # adjacent elements def longestSubsequence(arr, N): # Stores the length of the # longest subsequence count = 1 # Traverse the array for i in range(1, N, 1): # If previous and current # element are not same if (arr[i] != arr[i - 1]): # Increment the count count += 1 # Print the maximum length print(count) # Driver Code if __name__ == '__main__': arr = [ 7, 8, 1, 2, 2, 5, 5, 1 ] # Size of Array N = len(arr) # Function Call longestSubsequence(arr, N) # This code is contributed by ipg2016107
C#
// C# program for the // above approach using System; class GFG{ // Function that finds the length of // longest subsequence having different // adjacent elements static void longestSubsequence(int[] arr, int N) { // Stores the length of the // longest subsequence int count = 1; // Traverse the array for(int i = 1; i < N; i++) { // If previous and current // element are not same if (arr[i] != arr[i - 1]) { // Increment the count count++; } } // Print the maximum length Console.WriteLine(count); } // Driver Code public static void Main() { int[] arr = { 7, 8, 1, 2, 2, 5, 5, 1 }; // Size of Array int N = arr.Length; // Function Call longestSubsequence(arr, N); } } // This code is contributed by susmitakundugoaldanga
Javascript
<script> // JavaScript program to implement // the above approach // Function that finds the length of // longest subsequence having different // adjacent elements function longestSubsequence(arr, N) { // Stores the length of the // longest subsequence let count = 1; // Traverse the array for (let i = 1; i < N; i++) { // If previous and current // element are not same if (arr[i] != arr[i - 1]) { // Increment the count count++; } } // Print the maximum length document.write(count); } // Driver Code let arr = [7, 8, 1, 2, 2, 5, 5, 1]; // Size of Array let N = arr.length; // Function Call longestSubsequence(arr, N); </script>
6
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por supratik_mitra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA