Find maximum value of the last element after reducing the array with given operations
Last Updated :
31 May, 2022
Given an array arr[] of N elements, you have to perform the following operation on the given array until the array is reduced to a single elements,
- Choose two indices i and j such that i != j.
- Replace arr[i] with arr[i] - arr[j] and remove arr[j] from the array.
The task is to maximize and print the value of the last remaining element of the array.
Examples:
Input: arr[] = {20, 3, -15, 7}
Output: 45
Step 1: We can remove 7 and replace -15 with -22.
step 2: We can remove 3 and replace -22 with -25.
step 3: We can remove -25 and replace 20 with 45.
So 45 is the maximum value that we can get.
Input: arr[] = {5, 4, 6, 2}
Output: 13
Approach: In order to maximize the value of the last remaining element, there are three cases:
- Array has negative as well as positive numbers: First we will subtract all positive numbers (except one) from negative numbers. After this, we will only be left with a single positive and a single negative number. Now, we will subtract that negative number from the positive one which will yield a positive number at last as a result. So, in this case, the result is the sum of absolute values of the array elements.
- Array contains only positive numbers: First we find the smallest number and then subtract all positive numbers from it except one positive number. After this we get just one positive number and one negative number, now we will subtract the negative number from that positive one which will yield a positive number at last as a result. Here we can observe that the smallest
number has vanished and also the value is basically cut out from next greater element which is different from case 1. So, in this case the result is the sum of absolute values of array elements - 2 * minimum element. - Array contains only negative numbers: First we find the largest number and then subtract all negative number from it except one negative number. After this we get just one negative number and one positive number, now we will subtract the negative number from that positive one which will yield a positive number at last as a result. Here we can observe that the largest number has vanished and also the value is basically cut out from next greater element which is different from case 1. So in this case the result is the sum of the absolute values of array elements - 2 * absolute of largest element. Here we take largest as absolute of largest is smallest in case of negative number.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the maximized value
int find_maximum_value(int a[], int n)
{
int sum = 0;
int minimum = INT_MAX;
int pos = 0, neg = 0;
for (int i = 0; i < n; i++) {
// Overall minimum absolute value
// of some element from the array
minimum = min(minimum, abs(a[i]));
// Add all absolute values
sum += abs(a[i]);
// Count positive and negative elements
if (a[i] >= 0)
pos += 1;
else
neg += 1;
}
// Both positive and negative
// values are present
if (pos > 0 && neg > 0)
return sum;
// Only positive or negative
// values are present
return (sum - 2 * minimum);
}
// Driver code
int main()
{
int a[] = { 5, 4, 6, 2 };
int n = sizeof(a) / sizeof(a[0]);
cout << find_maximum_value(a, n);
return 0;
}
Java
// Java implementation of the approach
import java.io.*;
class GFG
{
// Function to return the maximized value
static int find_maximum_value(int a[], int n)
{
int sum = 0;
int minimum = Integer.MAX_VALUE;
int pos = 0, neg = 0;
for (int i = 0; i < n; i++)
{
// Overall minimum absolute value
// of some element from the array
minimum = Math.min(minimum, Math.abs(a[i]));
// Add all absolute values
sum += Math.abs(a[i]);
// Count positive and negative elements
if (a[i] >= 0)
pos += 1;
else
neg += 1;
}
// Both positive and negative
// values are present
if (pos > 0 && neg > 0)
return sum;
// Only positive or negative
// values are present
return (sum - 2 * minimum);
}
// Driver code
public static void main (String[] args)
{
int []a = { 5, 4, 6, 2 };
int n = a.length;
System.out.println(find_maximum_value(a, n));
}
}
// This code is contributed by ajit
Python
# Python3 implementation of the approach
# Function to return the maximized value
def find_maximum_value(a, n):
sum = 0
minimum = 10**9
pos = 0
neg = 0
for i in range(n):
# Overall minimum absolute value
# of some element from the array
minimum = min(minimum, abs(a[i]))
# Add all absolute values
sum += abs(a[i])
# Count positive and negative elements
if (a[i] >= 0):
pos += 1
else:
neg += 1
# Both positive and negative
# values are present
if (pos > 0 and neg > 0):
return sum
# Only positive or negative
# values are present
return (sum - 2 * minimum)
# Driver code
a= [5, 4, 6, 2]
n = len(a)
print(find_maximum_value(a, n))
# This code is contributed by mohit kumar 29
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to return the maximized value
static int find_maximum_value(int []a, int n)
{
int sum = 0;
int minimum = int.MaxValue;
int pos = 0, neg = 0;
for (int i = 0; i < n; i++)
{
// Overall minimum absolute value
// of some element from the array
minimum = Math.Min(minimum, Math.Abs(a[i]));
// Add all absolute values
sum += Math.Abs(a[i]);
// Count positive and negative elements
if (a[i] >= 0)
pos += 1;
else
neg += 1;
}
// Both positive and negative
// values are present
if (pos > 0 && neg > 0)
return sum;
// Only positive or negative
// values are present
return (sum - 2 * minimum);
}
// Driver code
static public void Main ()
{
int []a = { 5, 4, 6, 2 };
int n = a.Length;
Console.WriteLine(find_maximum_value(a, n));
}
}
// This code is contributed by AnkitRai01
JavaScript
<script>
// javascript implementation of the approach
// Function to return the maximized value
function find_maximum_value(a , n) {
var sum = 0;
var minimum = Number.MAX_VALUE;
var pos = 0, neg = 0;
for (i = 0; i < n; i++) {
// Overall minimum absolute value
// of some element from the array
minimum = Math.min(minimum, Math.abs(a[i]));
// Add all absolute values
sum += Math.abs(a[i]);
// Count positive and negative elements
if (a[i] >= 0)
pos += 1;
else
neg += 1;
}
// Both positive and negative
// values are present
if (pos > 0 && neg > 0)
return sum;
// Only positive or negative
// values are present
return (sum - 2 * minimum);
}
// Driver code
var a = [ 5, 4, 6, 2 ];
var n = a.length;
document.write(find_maximum_value(a, n));
// This code is contributed by todaysgaurav
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Similar Reads
Reduce the array to a single element with the given operation Given an integer N and an array arr containing integers from 1 to N in a sorted fashion. The task is to reduce the array to a single element by performing the following operation: All the elements in the odd positions will be removed after a single operation. This operation will be performed until o
4 min read
Reduce the array to a single element with the given operation Given an integer N and an array arr containing integers from 1 to N in a sorted fashion. The task is to reduce the array to a single element by performing the following operation: All the elements in the odd positions will be removed after a single operation. This operation will be performed until o
4 min read
Minimum element left from the array after performing given operations Given an array arr[] of N integers, the task is to remove the elements from both the ends of the array i.e. in a single operation, either the first or the last element can be removed from the current remaining elements of the array. This operation needs to be performed in such a way that the last el
3 min read
Maximize the value left after reducing the Arrays based on given conditions Given three arrays arr1[], arr2[] and arr3[] of integers, the task is to find the maximum value left in an array after performing the following operation, where in each operation: Select an element (y) from one array and remove that from the array.Subtract y from another element(x) of another array.
8 min read
Minimum number of given operations required to reduce the array to 0 element Given an array arr[] of N integers. The task is to find the minimum number of given operations required to reduce the array to 0 elements. In a single operation, any element can be chosen from the array and all of its multiples get removed including itself.Examples: Input: arr[] = {2, 4, 6, 3, 4, 6,
6 min read
Find the position of the last removed element from the array Given an array of size N and an integer M . Perform the following operations on the given array: If a[i] > M then push a[i] - M to end of the array, otherwise remove it from the array.Perform the first operation while the array is non-empty. The task is to find the original position of the elemen
6 min read