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)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
25 Jan, 2022
Like Article
Save Article