Find maximum sum of subsequence after flipping signs of at most K elements in given Array
Last Updated :
16 May, 2023
Given an array arr, the task is to find the maximum sum of subsequence after flipping signs of at most K elements.
Examples:
Input: arr = [6, -10, -1, 0, -4, 2], K = 2
Output: 22
Explanation: Maximum sum can be obtained by flipping -10 and -4 to 10 and 4 respectively
Input: arr = [1, 2, 3], K = 3
Output: 6
Approach: Follow the steps below to solve the problem:
- Sort the array
- Initialize a variable sum to 0 to store the maximum sum of subsequence
- Iterate the array and convert negative elements to positive and decrement k until k > 0
- Traverse the array and add only positive values to sum
- Return the answer sum
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int maxSubseq( int arr[], int N, int K)
{
int sum = 0;
sort(arr, arr + N);
for ( int i = 0; i < N; i++) {
if (K == 0)
break ;
if (arr[i] < 0) {
arr[i] = -arr[i];
K--;
}
}
for ( int i = 0; i < N; i++)
if (arr[i] > 0)
sum += arr[i];
return sum;
}
int main()
{
int arr[] = { 6, -10, -1, 0, -4, 2 };
int K = 2;
int N = sizeof (arr)
/ sizeof (arr[0]);
cout << maxSubseq(arr, N, K);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int maxSubseq( int arr[], int N, int K)
{
int sum = 0 ;
Arrays.sort(arr);
for ( int i = 0 ; i < N; i++) {
if (K == 0 )
break ;
if (arr[i] < 0 ) {
arr[i] = -arr[i];
K--;
}
}
for ( int i = 0 ; i < N; i++)
if (arr[i] > 0 )
sum += arr[i];
return sum;
}
public static void main(String []args)
{
int []arr = { 6 , - 10 , - 1 , 0 , - 4 , 2 };
int K = 2 ;
int N = arr.length;
System.out.println(maxSubseq(arr, N, K));
}
}
|
Python3
def maxSubseq(arr, N, K):
sum = 0
arr.sort()
for i in range (N):
if (K = = 0 ):
break
if (arr[i] < 0 ):
arr[i] = - arr[i]
K - = 1
for i in range (N):
if (arr[i] > 0 ):
sum + = arr[i]
return sum
if __name__ = = "__main__" :
arr = [ 6 , - 10 , - 1 , 0 , - 4 , 2 ]
K = 2
N = len (arr)
print (maxSubseq(arr, N, K))
|
C#
using System;
class GFG
{
static int maxSubseq( int []arr, int N, int K)
{
int sum = 0;
Array.Sort(arr);
for ( int i = 0; i < N; i++) {
if (K == 0)
break ;
if (arr[i] < 0) {
arr[i] = -arr[i];
K--;
}
}
for ( int i = 0; i < N; i++)
if (arr[i] > 0)
sum += arr[i];
return sum;
}
public static void Main( string [] args)
{
int []arr = { 6, -10, -1, 0, -4, 2 };
int K = 2;
int N = arr.Length;
Console.Write(maxSubseq(arr, N, K));
}
}
|
Javascript
<script>
const maxSubseq = (arr, N, K) => {
let sum = 0;
arr.sort((a, b) => a - b);
for (let i = 0; i < N; i++) {
if (K == 0)
break ;
if (arr[i] < 0) {
arr[i] = -arr[i];
K--;
}
}
for (let i = 0; i < N; i++)
if (arr[i] > 0)
sum += arr[i];
return sum;
}
let arr = [6, -10, -1, 0, -4, 2];
let K = 2;
let N = arr.length
document.write(maxSubseq(arr, N, K));
</script>
|
Time Complexity: O(N*log2N) since sort() has been called. Here, N is size of input array.
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...