Maximize first array element by performing given operations at most K times
Last Updated :
20 Oct, 2021
Given an array arr[] of size N an integer K, the task is to find the maximize the first element of the array by performing the following operations at most K times:
- Choose a pair of indices i and j (0 ? i, j ? N-1) such that |i ? j| = 1 and arri > 0.
- Set arri = arri ? 1 and arrj = arrj + 1 on those two indices.
Examples:
Input: arr[ ] = {1, 0, 3, 2}, K = 5
Output: 3
Explanation:
One of the possible set of operations can be:
Operation 1: Select i = 3 and j = 2. Therefore, the array modifies to {1, 1, 2, 2}.
Operation 2: Select i = 3 and j = 2. Therefore, the array modifies to {1, 2, 1, 2}.
Operation 3: Select i = 2 and j = 1. Therefore, the array modifies to {2, 1, 1, 2}.
Operation 4: Select i = 2 and j = 1. Therefore, the array modifies to {3, 0, 1, 2}.
Input: arr[] = {5, 1}, K = 2
Output: 6
Approach: Follow the steps below to solve the problem:
- At any point, it is optimal to choose indices i and j closest to first element of the array, with i > j.
- Therefore, for every operation, traverse the array from left to right and move the elements closer towards the first element.
- If all the elements are in the first position at some point, stop traversing and print the first array element.
Below is the implementation of the above approach:
C++
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to maximize
// the first array element
int getMax(int arr[], int N, int K)
{
// Traverse the array
for (int i = 1; i < N; i++) {
// Initialize cur_val to a[i]
int cur_val = arr[i];
// If all operations
// are not over yet
while (K >= i) {
// If current value is
// greater than zero
if (cur_val > 0) {
// Incrementing first
// element of array by 1
arr[0] = arr[0] + 1;
// Decrementing current
// value of array by 1
cur_val = cur_val - 1;
// Decrementing number
// of operations by i
K = K - i;
}
// If current value is
// zero, then break
else
break;
}
}
// Print first array element
cout << arr[0];
}
// Driver Code
int main()
{
// Given array
int arr[] = { 1, 0, 3, 2 };
// Size of the array
int N = sizeof(arr) / sizeof(arr[0]);
// Given K
int K = 5;
// Prints the maximum
// possible value of the
// first array element
getMax(arr, N, K);
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function to maximize
// the first array element
static void getMax(int arr[], int N, int K)
{
// Traverse the array
for (int i = 1; i < N; i++)
{
// Initialize cur_val to a[i]
int cur_val = arr[i];
// If all operations
// are not over yet
while (K >= i)
{
// If current value is
// greater than zero
if (cur_val > 0)
{
// Incrementing first
// element of array by 1
arr[0] = arr[0] + 1;
// Decrementing current
// value of array by 1
cur_val = cur_val - 1;
// Decrementing number
// of operations by i
K = K - i;
}
// If current value is
// zero, then break
else
break;
}
}
// Print first array element
System.out.print(arr[0]);
}
// Driver Code
public static void main(String[] args)
{
// Given array
int arr[] = { 1, 0, 3, 2 };
// Size of the array
int N = arr.length;
// Given K
int K = 5;
// Prints the maximum
// possible value of the
// first array element
getMax(arr, N, K);
}
}
// This code is contributed by shikhasingrajput
Python3
# Python3 program for the above approach
# Function to maximize
# the first array element
def getMax(arr, N, K):
# Traverse the array
for i in range(1, N, 1):
# Initialize cur_val to a[i]
cur_val = arr[i]
# If all operations
# are not over yet
while (K >= i):
# If current value is
# greater than zero
if (cur_val > 0):
# Incrementing first
# element of array by 1
arr[0] = arr[0] + 1
# Decrementing current
# value of array by 1
cur_val = cur_val - 1
# Decrementing number
# of operations by i
K = K - i
# If current value is
# zero, then break
else:
break
# Print first array element
print(arr[0])
# Driver Code
if __name__ == '__main__':
# Given array
arr = [ 1, 0, 3, 2 ]
# Size of the array
N = len(arr)
# Given K
K = 5
# Prints the maximum
# possible value of the
# first array element
getMax(arr, N, K)
# This code is contributed by SURENDRA_GANGWAR
C#
// C# program for the above approach
using System;
class GFG{
// Function to maximize
// the first array element
static void getMax(int[] arr, int N,
int K)
{
// Traverse the array
for(int i = 1; i < N; i++)
{
// Initialize cur_val to a[i]
int cur_val = arr[i];
// If all operations
// are not over yet
while (K >= i)
{
// If current value is
// greater than zero
if (cur_val > 0)
{
// Incrementing first
// element of array by 1
arr[0] = arr[0] + 1;
// Decrementing current
// value of array by 1
cur_val = cur_val - 1;
// Decrementing number
// of operations by i
K = K - i;
}
// If current value is
// zero, then break
else
break;
}
}
// Print first array element
Console.Write(arr[0]);
}
// Driver code
static void Main()
{
// Given array
int[] arr = { 1, 0, 3, 2 };
// Size of the array
int N = arr.Length;
// Given K
int K = 5;
// Prints the maximum
// possible value of the
// first array element
getMax(arr, N, K);
}
}
// This code is contributed by divyesh072019
JavaScript
<script>
// javascript program for the above approach
// Function to maximize
// the first array element
function getMax(arr , N , K) {
// Traverse the array
for (i = 1; i < N; i++) {
// Initialize cur_val to a[i]
var cur_val = arr[i];
// If all operations
// are not over yet
while (K >= i) {
// If current value is
// greater than zero
if (cur_val > 0) {
// Incrementing first
// element of array by 1
arr[0] = arr[0] + 1;
// Decrementing current
// value of array by 1
cur_val = cur_val - 1;
// Decrementing number
// of operations by i
K = K - i;
}
// If current value is
// zero, then break
else
break;
}
}
// Print first array element
document.write(arr[0]);
}
// Driver Code
// Given array
var arr = [ 1, 0, 3, 2 ];
// Size of the array
var N = arr.length;
// Given K
var K = 5;
// Prints the maximum
// possible value of the
// first array element
getMax(arr, N, K);
// This code is contributed by aashish1995
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Similar Reads
Maximize sum of array elements removed by performing the given operations Given two arrays arr[] and min[] consisting of N integers and an integer K. For each index i, arr[i] can be reduced to at most min[i]. Consider a variable, say S(initially 0). The task is to find the maximum value of S that can be obtained by performing the following operations: Choose an index i an
8 min read
Maximize the minimum value of Array by performing given operations at most K times Given array A[] of size N and integer K, the task for this problem is to maximize the minimum value of the array by performing given operations at most K times. In one operation choose any index and increase that array element by 1. Examples: Input: A[] = {3, 1, 2, 4, 6, 2, 5}, K = 8Output: 4Explana
10 min read
Maximize length of subarray of equal elements by performing at most K increment operations Given an array A[] consisting of N integers and an integer K, the task is to maximize the length of the subarray having equal elements after performing at most K increments by 1 on array elements. Note: Same array element can be incremented more than once. Examples: Input: A[] = {2, 4, 8, 5, 9, 6},
8 min read
Maximize Kth largest element after splitting the given Array at most C times Given an array arr[] and two positive integers K and C, the task is to maximize the Kth maximum element obtained after splitting an array element arr[] into two parts(not necessarily an integer) C number of times. Print -1 if there doesn't exist Kth maximum element. Note: It is compulsory to do spli
7 min read
Minimize maximum array element possible by at most K splits on the given array Given an array arr[] consisting of N positive integers and a positive integer K, the task is to minimize the maximum element present in the array by splitting at most K array elements into two numbers equal to their value. Examples: Input: arr[] = {2, 4, 8, 2}, K = 4Output: 2Explanation:Following se
9 min read