Dada una array arr[] de tamaño N , la tarea es encontrar la suma máxima de subsecuencias no vacías presentes en la array dada.
Ejemplos:
Entrada: arr[] = { 2, 3, 7, 1, 9 }
Salida: 22
Explicación:
Suma de la subsecuencia { arr[0], arr[1], arr[2], arr[3], arr[4 ] } es igual a 22, que es la suma máxima posible de cualquier subsecuencia de la array.
Por lo tanto, la salida requerida es 22.Entrada: arr[] = { -2, 11, -4, 2, -3, -10 }
Salida: 13
Explicación:
La suma de la subsecuencia { arr[1], arr[3] } es igual a 13, que es la suma máxima posible de cualquier subsecuencia de la array.
Por lo tanto, la salida requerida es 13.
Enfoque ingenuo: el enfoque más simple para resolver este problema es generar todas las posibles subsecuencias no vacías de la array y calcular la suma de cada subsecuencia de la array. Finalmente, imprima la suma máxima obtenida de la subsucesión.
Complejidad de Tiempo: O(N * 2 N )
Espacio Auxiliar: O(N)
Enfoque Eficiente: La idea es recorrer el arreglo y calcular la suma de los elementos positivos del arreglo e imprimir la suma obtenida. Siga los pasos a continuación para resolver el problema:
- Compruebe si el elemento más grande de la array es mayor que 0 o no. Si se determina que es cierto, recorra la array e imprima la suma de todos los elementos positivos de la array.
- De lo contrario, imprima el elemento más grande presente en la array .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to print the maximum // non-empty subsequence sum int MaxNonEmpSubSeq(int a[], int n) { // Stores the maximum non-empty // subsequence sum in an array int sum = 0; // Stores the largest element // in the array int max = *max_element(a, a + n); if (max <= 0) { return max; } // Traverse the array for (int i = 0; i < n; i++) { // If a[i] is greater than 0 if (a[i] > 0) { // Update sum sum += a[i]; } } return sum; } // Driver Code int main() { int arr[] = { -2, 11, -4, 2, -3, -10 }; int N = sizeof(arr) / sizeof(arr[0]); cout << MaxNonEmpSubSeq(arr, N); return 0; }
Java
// Java program to implement // the above approach import java.util.*; class GFG { // Function to print the maximum // non-empty subsequence sum static int MaxNonEmpSubSeq(int a[], int n) { // Stores the maximum non-empty // subsequence sum in an array int sum = 0; // Stores the largest element // in the array int max = a[0]; for(int i = 1; i < n; i++) { if(max < a[i]) { max = a[i]; } } if (max <= 0) { return max; } // Traverse the array for (int i = 0; i < n; i++) { // If a[i] is greater than 0 if (a[i] > 0) { // Update sum sum += a[i]; } } return sum; } // Driver code public static void main(String[] args) { int arr[] = { -2, 11, -4, 2, -3, -10 }; int N = arr.length; System.out.println(MaxNonEmpSubSeq(arr, N)); } } // This code is contributed by divyesh072019
Python3
# Python3 program to implement # the above approach # Function to print the maximum # non-empty subsequence sum def MaxNonEmpSubSeq(a, n): # Stores the maximum non-empty # subsequence sum in an array sum = 0 # Stores the largest element # in the array maxm = max(a) if (maxm <= 0): return maxm # Traverse the array for i in range(n): # If a[i] is greater than 0 if (a[i] > 0): # Update sum sum += a[i] return sum # Driver Code if __name__ == '__main__': arr = [ -2, 11, -4, 2, -3, -10 ] N = len(arr) print(MaxNonEmpSubSeq(arr, N)) # This code is contributed by mohit kumar 29
C#
// C# program to implement // the above approach using System; class GFG{ // Function to print the maximum // non-empty subsequence sum static int MaxNonEmpSubSeq(int[] a, int n) { // Stores the maximum non-empty // subsequence sum in an array int sum = 0; // Stores the largest element // in the array int max = a[0]; for(int i = 1; i < n; i++) { if (max < a[i]) { max = a[i]; } } if (max <= 0) { return max; } // Traverse the array for(int i = 0; i < n; i++) { // If a[i] is greater than 0 if (a[i] > 0) { // Update sum sum += a[i]; } } return sum; } // Driver Code static void Main() { int[] arr = { -2, 11, -4, 2, -3, -10 }; int N = arr.Length; Console.WriteLine(MaxNonEmpSubSeq(arr, N)); } } // This code is contributed by divyeshrabadiya07
Javascript
<script> // Javascript program to implement // the above approach // Function to print the maximum // non-empty subsequence sum function MaxNonEmpSubSeq(a, n) { // Stores the maximum non-empty // subsequence sum in an array let sum = 0; // Stores the largest element // in the array let max = a[0]; for(let i = 1; i < n; i++) { if (max < a[i]) { max = a[i]; } } if (max <= 0) { return max; } // Traverse the array for(let i = 0; i < n; i++) { // If a[i] is greater than 0 if (a[i] > 0) { // Update sum sum += a[i]; } } return sum; } let arr = [ -2, 11, -4, 2, -3, -10 ]; let N = arr.length; document.write(MaxNonEmpSubSeq(arr, N)); </script>
13
Complejidad temporal: O(N)
Espacio auxiliar: O(1)