
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Maximize the sum of array by multiplying prefix of array with -1 in C++
We are given an integer array and the task is to firstly fetch the prefix of an array and then multiply it with -1, secondly calculate the prefix sum of an array and lastly find the maximum sum from the prefix array generated.
Prefix array is generated as −
First element of prefixArray[0] = first element of an array
Second element of prefixArray[1] = prefixArray[0] + arr[1]
Third element of prefixArray[2] = prefixArray[1] + arr[2]
Fourth element of prefixArray[3] = prefixArray[2] + arr[3] …..etc.
Let us see various input output scenarios for this -
In − int arr[] = {2, 4, 1, 5, 2}
Out − Prefix array is: -2 2 3 8 10 Maximize the sum of array by multiplying prefix of array with -1 are: 21
Explanation − we are given with an integer array. So we will firstly fetch the prefix of an array which is 2 and multiple it with -1. So, the new array will be {-2, 4, 1, 5, 2}. Now, we will form the prefix array which is {-2, 2, 3, 8, 10}. The last step is to maximize the sum as -2+2+3+8+`0 = 21 which is the final output.
In − int arr[] = {-1, 4, 2, 1, -9, 6};
Out − Prefix array is: 1 5 7 8 -1 5 Maximize the sum of array by multiplying prefix of array with -1 are: 19
Explanation − we are given with an integer array. So we will firstly fetch the prefix of an array which is -1 and multiple it with -1. So, the new array will be {1, 4, 2, 1, -9, 6}. Now, we will form the prefix array which is {1, 5, 7, 8, -1, 5}. The last step is to maximize the sum as 1+5+8+5 = 19 which is the final output.
Approach used in the below program is as follows −
Declare an integer array and a temporary variable as x to -1 then set arr[0] to arr[0] * x.
Calculate the size of an array. Declare a prefix array as prefix_arry[size]. Call a function create_prefix_arr(arr, size, prefix_array) to generate the prefix array from the given array. Print the prefix array
Call the function maximize_sum(prefix_array, size) that will store the maximum sum of the array.
Inside the function void create_prefix_arr(int arr[], int size, int prefix_array[])
Set prefix_array[0] to arr[0].
Start loop FOR from i to 0 till the size of an array. Inside the loop, set prefix_array[i] to prefix_array[i-1] + arr[i].
Inside the function int maximize_sum(int prefix_array[], int size)
Declare a temporary variable as temp and set it to -1.
Start loop FOR from i to 0 till the size of an array. Inside the loop, set temp as max(temp, prefix_array[i])
Declare an array as arr[temp +1] and initialise all the elements of an array with 0.
Start loop FOR from i to 0 till the size of an array. Inside the loop, set arr[prefix_array[i]]++
Declare a temporary variable as max_sum and set it to 0. Declare a variable as int i to temp
Start loop WHILE i>0. Check IF arr[i] > 0 then set max_sum to max_sum + i and decrement the arr[i-1]-- and decrement the arr[i]--. ELSE, decrement the i by 1.
Return max_sum.
Example
#include <bits/stdc++.h> using namespace std; #define Max_size 5 //create the prefix array void create_prefix_arr(int arr[], int size, int prefix_array[]) { prefix_array[0] = arr[0]; for(int i=0; i<size; i++) { prefix_array[i] = prefix_array[i-1] + arr[i]; } } //find the maximum sum of prefix array int maximize_sum(int prefix_array[], int size) { int temp = -1; for(int i = 0; i < size; i++) { temp = max(temp, prefix_array[i]); } int arr[temp + 1]; memset(arr, 0, sizeof(arr)); for(int i = 0; i < size; i++) { arr[prefix_array[i]]++; } int max_sum = 0; int i = temp; while(i>0) { if(arr[i] > 0) { max_sum = max_sum + i; arr[i-1]--; arr[i]--; } else { i--; } } return max_sum; } int main() { int arr[] = {2, 4, 1, 5, 2}; int x = -1; arr[0] = arr[0] * x; int size = sizeof(arr) / sizeof(arr[0]); int prefix_array[size]; //call function to create a prefix array create_prefix_arr(arr, size, prefix_array); //print the prefix array cout<<"Prefix array is: "; for(int i = 0; i < size; i++) { cout << prefix_array[i] << " "; } //print the maximum sum of prefix array cout<<"\nMaximize the sum of array by multiplying prefix of array with -1 are:" <<maximize_sum(prefix_array, size); return 0; }
Output
If we run the above code it will generate the following Output
Prefix array is: -2 2 3 8 10 Maximize the sum of array by multiplying prefix of array with -1 are: 21
- Related Articles
- Maximize the subarray sum after multiplying all elements of any subarray with X in C++
- Prefix Sum of Matrix (Or 2D Array) in C++
- Maximize array sum after K negation in C++
- Maximize Sum Of Array After K Negations in Python
- Maximize the median of an array in C++
- Maximum occurrence of prefix in the Array in C++
- Maximize the size of array by deleting exactly k sub-arrays to make array prime in C++
- Maximize the bitwise OR of an array in C++
- Prefix sums (Creating an array with increasing sum) with Recursion in JavaScript
- Prefix sum array in python using accumulate function
- Maximize the sum of X+Y elements by picking X and Y elements from 1st and 2nd array in C++
- Minimizing array sum by applying XOR operation on all elements of the array in C++
- Maximize the sum of selected numbers from an array to make it empty
- Maximize the median of the given array after adding K elements to the same array in C++
- Maximize volume of cuboid with given sum of sides in C++
