Given an array arr[] of size N, the task is to find the maximum sum non-empty subsequence present in the given array.
Examples:
Input: arr[] = { 2, 3, 7, 1, 9 }
Output: 22
Explanation:
Sum of the subsequence { arr[0], arr[1], arr[2], arr[3], arr[4] } is equal to 22, which is the maximum possible sum of any subsequence of the array.
Therefore, the required output is 22.
Input: arr[] = { -2, 11, -4, 2, -3, -10 }
Output: 13
Explanation:
Sum of the subsequence { arr[1], arr[3] } is equal to 13, which is the maximum possible sum of any subsequence of the array.
Therefore, the required output is 13.
Naive Approach: The simplest approach to solve this problem is to generate all possible non-empty subsequences of the array and calculate the sum of each subsequence of the array. Finally, print the maximum sum obtained from the subsequence.
Time Complexity: O(N * 2N)
Auxiliary Space: O(N)
Efficient Approach: The idea is to traverse the array and calculate the sum of positive elements of the array and print the sum obtained. Follow the steps below to solve the problem:
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int MaxNonEmpSubSeq( int a[], int n)
{
int sum = 0;
int max = *max_element(a, a + n);
if (max <= 0) {
return max;
}
for ( int i = 0; i < n; i++) {
if (a[i] > 0) {
sum += a[i];
}
}
return sum;
}
int main()
{
int arr[] = { -2, 11, -4, 2, -3, -10 };
int N = sizeof (arr) / sizeof (arr[0]);
cout << MaxNonEmpSubSeq(arr, N);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int MaxNonEmpSubSeq( int a[], int n)
{
int sum = 0 ;
int max = a[ 0 ];
for ( int i = 1 ; i < n; i++)
{
if (max < a[i])
{
max = a[i];
}
}
if (max <= 0 )
{
return max;
}
for ( int i = 0 ; i < n; i++)
{
if (a[i] > 0 )
{
sum += a[i];
}
}
return sum;
}
public static void main(String[] args)
{
int arr[] = { - 2 , 11 , - 4 , 2 , - 3 , - 10 };
int N = arr.length;
System.out.println(MaxNonEmpSubSeq(arr, N));
}
}
|
Python3
def MaxNonEmpSubSeq(a, n):
sum = 0
maxm = max (a)
if (maxm < = 0 ):
return maxm
for i in range (n):
if (a[i] > 0 ):
sum + = a[i]
return sum
if __name__ = = '__main__' :
arr = [ - 2 , 11 , - 4 , 2 , - 3 , - 10 ]
N = len (arr)
print (MaxNonEmpSubSeq(arr, N))
|
C#
using System;
class GFG{
static int MaxNonEmpSubSeq( int [] a, int n)
{
int sum = 0;
int max = a[0];
for ( int i = 1; i < n; i++)
{
if (max < a[i])
{
max = a[i];
}
}
if (max <= 0)
{
return max;
}
for ( int i = 0; i < n; i++)
{
if (a[i] > 0)
{
sum += a[i];
}
}
return sum;
}
static void Main()
{
int [] arr = { -2, 11, -4, 2, -3, -10 };
int N = arr.Length;
Console.WriteLine(MaxNonEmpSubSeq(arr, N));
}
}
|
Javascript
<script>
function MaxNonEmpSubSeq(a, n)
{
let sum = 0;
let max = a[0];
for (let i = 1; i < n; i++)
{
if (max < a[i])
{
max = a[i];
}
}
if (max <= 0)
{
return max;
}
for (let i = 0; i < n; i++)
{
if (a[i] > 0)
{
sum += a[i];
}
}
return sum;
}
let arr = [ -2, 11, -4, 2, -3, -10 ];
let N = arr.length;
document.write(MaxNonEmpSubSeq(arr, N));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
25 Jan, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...