Maximize the last Array element as per the given conditions
Last Updated :
29 May, 2021
Given an array arr[] consisting of N integers, rearrange the array such that it satisfies the following conditions:
- arr[0] must be 1.
- Difference between adjacent array elements should not exceed 1, that is, arr[i] – arr[i-1] ? 1 for all 1 ? i < N.
The permissible operations are as follows:
- Rearrange the elements in any way.
- Reduce any element to any number ? 1.
The task is to find the maximum possible value that can be placed at the last index of the array.
Examples:
Input: arr[] = {3, 1, 3, 4}
Output: 4
Explanation:
Subtracting 1 from the first element modifies the array to {2, 1, 3, 4}.
Swapping the first two elements modifies the array to {1, 2, 3, 4}.
Therefore, maximum value placed at the last index is 4.
Input: arr[] = {1, 1, 1, 1}
Output: 1
Approach:
To solve the given problem, sort the given array and balance it according to the given condition starting from left towards right. Follow the below steps to solve the problem:
- Sort the array in ascending order.
- If the first element is not 1, make it 1.
- Traverse the array over the indices [1, N – 1) and check if every adjacent element has a difference of ? 1.
- If not, decrement the value till the difference becomes ? 1.
- Return the last element of the array.
Below is the implementation of the above problem:
C++
#include <bits/stdc++.h>
using namespace std;
int maximizeFinalElement( int arr[], int n)
{
sort(arr, arr + n);
if (arr[0] != 1)
arr[0] = 1;
for ( int i = 1; i < n; i++) {
if (arr[i] - arr[i - 1] > 1) {
arr[i] = arr[i - 1] + 1;
}
}
return arr[n - 1];
}
int main()
{
int n = 4;
int arr[] = { 3, 1, 3, 4 };
int max = maximizeFinalElement(arr, n);
cout << max;
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG{
public static int maximizeFinalElement( int arr[],
int n)
{
Arrays.sort(arr);
if (arr[ 0 ] != 1 )
arr[ 0 ] = 1 ;
for ( int i = 1 ; i < n; i++)
{
if (arr[i] - arr[i - 1 ] > 1 )
{
arr[i] = arr[i - 1 ] + 1 ;
}
}
return arr[n - 1 ];
}
public static void main (String[] args)
{
int n = 4 ;
int arr[] = { 3 , 1 , 3 , 4 };
int max = maximizeFinalElement(arr, n);
System.out.print(max);
}
}
|
Python3
def maximizeFinalElement(arr, n):
arr.sort();
if (arr[ 0 ] ! = 1 ):
arr[ 0 ] = 1 ;
for i in range ( 1 , n):
if (arr[i] - arr[i - 1 ] > 1 ):
arr[i] = arr[i - 1 ] + 1 ;
return arr[n - 1 ];
if __name__ = = '__main__' :
n = 4 ;
arr = [ 3 , 1 , 3 , 4 ];
max = maximizeFinalElement(arr, n);
print ( max );
|
C#
using System;
class GFG{
public static int maximizeFinalElement( int []arr,
int n)
{
Array.Sort(arr);
if (arr[0] != 1)
arr[0] = 1;
for ( int i = 1; i < n; i++)
{
if (arr[i] - arr[i - 1] > 1)
{
arr[i] = arr[i - 1] + 1;
}
}
return arr[n - 1];
}
public static void Main(String[] args)
{
int n = 4;
int []arr = { 3, 1, 3, 4 };
int max = maximizeFinalElement(arr, n);
Console.WriteLine(max);
}
}
|
Javascript
<script>
function maximizeFinalElement(arr, n)
{
arr.sort((a, b) => a - b);
if (arr[0] != 1)
arr[0] = 1;
for (let i = 1; i < n; i++) {
if (arr[i] - arr[i - 1] > 1) {
arr[i] = arr[i - 1] + 1;
}
}
return arr[n - 1];
}
let n = 4;
let arr = [ 3, 1, 3, 4 ];
let max = maximizeFinalElement(arr, n);
document.write(max);
</script>
|
Time Complexity: O(NlogN)
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...