Making elements distinct in a sorted array by minimum increments
Last Updated :
19 Sep, 2022
Given a sorted integer array. We need to make array elements distinct by increasing values and keeping array sum minimum possible. We need to print the minimum possible sum as output.
Examples:
Input : arr[] = { 2, 2, 3, 5, 6 } ;
Output : 20
Explanation : We make the array as {2,
3, 4, 5, 6}. Sum becomes 2 + 3 + 4 +
5 + 6 = 20
Input : arr[] = { 20, 20 } ;
Output : 41
Explanation : We make {20, 21}
Input : arr[] = { 3, 4, 6, 8 };
Output : 21
Explanation : All elements are unique
so result is sum of each elements.
Method 1:
- Traverse each element of array .
- if arr[i] == arr[i-1] then update each element of array by adding 1 from i-th(current) position to where element is either equal to its previous element or has become less than previous (because previous was increased).
- After traversing of each element return sum.
Implementation:
C++
#include <iostream>
using namespace std;
int minSum( int arr[], int n)
{
int sum = arr[0];
for ( int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1]) {
int j = i;
while (j < n && arr[j] <= arr[j - 1]) {
arr[j] = arr[j] + 1;
j++;
}
}
sum = sum + arr[i];
}
return sum;
}
int main()
{
int arr[] = { 2, 2, 3, 5, 6 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << minSum(arr, n) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int minSum( int arr[], int n)
{
int sum = arr[ 0 ];
for ( int i = 1 ; i < n; i++)
{
if (arr[i] == arr[i - 1 ]) {
int j = i;
while (j < n && arr[j] <= arr[j - 1 ])
{
arr[j] = arr[j] + 1 ;
j++;
}
}
sum = sum + arr[i];
}
return sum;
}
public static void main (String[] args)
{
int arr[] = { 2 , 2 , 3 , 5 , 6 };
int n = arr.length;
System.out.println(minSum(arr, n));
}
}
|
Python3
def minSum(arr, n):
sm = arr[ 0 ]
for i in range ( 1 , n):
if arr[i] = = arr[i - 1 ]:
j = i
while j < n and arr[j] < = arr[j - 1 ]:
arr[j] = arr[j] + 1
j + = 1
sm = sm + arr[i]
return sm
arr = [ 2 , 2 , 3 , 5 , 6 ]
n = len (arr)
print (minSum(arr, n))
|
C#
using System;
class GFG
{
static int minSum( int []arr, int n)
{
int sum = arr[0];
for ( int i = 1; i < n; i++)
{
if (arr[i] == arr[i - 1]) {
int j = i;
while (j < n && arr[j] <= arr[j - 1])
{
arr[j] = arr[j] + 1;
j++;
}
}
sum = sum + arr[i];
}
return sum;
}
public static void Main ()
{
int []arr = { 2, 2, 3, 5, 6 };
int n = arr.Length;
Console.WriteLine(minSum(arr, n));
}
}
|
PHP
<?php
function minSum( $arr , $n )
{
$sum = $arr [0];
for ( $i = 1; $i < $n ; $i ++) {
if ( $arr [ $i ] == $arr [ $i - 1])
{
$j = $i ;
while ( $j < $n && $arr [ $j ]
<= $arr [ $j - 1])
{
$arr [ $j ] = $arr [ $j ] + 1;
$j ++;
}
}
$sum = $sum + $arr [ $i ];
}
return $sum ;
}
$arr = array ( 2, 2, 3, 5, 6 );
$n = sizeof( $arr ) ;
echo minSum( $arr , $n ), "\n" ;
?>
|
Javascript
<script>
function minSum(arr, n)
{
let sum = arr[0];
for (let i = 1; i < n; i++)
{
if (arr[i] == arr[i - 1]) {
let j = i;
while (j < n && arr[j] <= arr[j - 1])
{
arr[j] = arr[j] + 1;
j++;
}
}
sum = sum + arr[i];
}
return sum;
}
let arr = [ 2, 2, 3, 5, 6 ];
let n = arr.length;
document.write(minSum(arr, n));
</script>
|
Time Complexity : O(n^2)
Auxiliary Space: O(1)
Method 2:
- Traverse each element of array .
- If arr[i] <= prev then update prev by adding 1 and update sum by adding prev,
else update prev by cur element and update sum by adding cur element(arr[i]).
- After traversing of each element return sum .
Implementation:
C++
#include <iostream>
using namespace std;
int minSum( int arr[], int n)
{
int sum = arr[0], prev = arr[0];
for ( int i = 1; i < n; i++) {
if (arr[i] <= prev) {
prev = prev + 1;
sum = sum + prev;
}
else {
sum = sum + arr[i];
prev = arr[i];
}
}
return sum;
}
int main()
{
int arr[] = { 2, 2, 3, 5, 6 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << minSum(arr, n) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int minSum( int arr[], int n)
{
int sum = arr[ 0 ], prev = arr[ 0 ];
for ( int i = 1 ; i < n; i++) {
if (arr[i] <= prev) {
prev = prev + 1 ;
sum = sum + prev;
}
else {
sum = sum + arr[i];
prev = arr[i];
}
}
return sum;
}
public static void main (String[] args) {
int arr[] = { 2 , 2 , 3 , 5 , 6 };
int n = arr.length;
System.out.println(minSum(arr, n));
}
}
|
Python3
def minSum(arr, n):
sum = arr[ 0 ]; prev = arr[ 0 ]
for i in range ( 1 , n):
if arr[i] < = prev:
prev = prev + 1
sum = sum + prev
else :
sum = sum + arr[i]
prev = arr[i]
return sum
arr = [ 2 , 2 , 3 , 5 , 6 ]
n = len (arr)
print (minSum(arr, n))
|
C#
using System;
class GFG {
static int minSum( int []arr, int n)
{
int sum = arr[0], prev = arr[0];
for ( int i = 1; i < n; i++) {
if (arr[i] <= prev) {
prev = prev + 1;
sum = sum + prev;
}
else {
sum = sum + arr[i];
prev = arr[i];
}
}
return sum;
}
public static void Main () {
int []arr = { 2, 2, 3, 5, 6 };
int n = arr.Length;
Console.WriteLine(minSum(arr, n));
}
}
|
PHP
<?php
function minSum( $arr , $n )
{
$sum = $arr [0];
$prev = $arr [0];
for ( $i = 1; $i < $n ; $i ++)
{
if ( $arr [ $i ] <= $prev )
{
$prev = $prev + 1;
$sum = $sum + $prev ;
}
else
{
$sum = $sum + $arr [ $i ];
$prev = $arr [ $i ];
}
}
return $sum ;
}
$arr = array (2, 2, 3, 5, 6);
$n = count ( $arr );
echo minSum( $arr , $n );
?>
|
Javascript
<script>
function minSum(arr, n)
{
let sum = arr[0], prev = arr[0];
for (let i = 1; i < n; i++)
{
if (arr[i] <= prev)
{
prev = prev + 1;
sum = sum + prev;
}
else
{
sum = sum + arr[i];
prev = arr[i];
}
}
return sum;
}
let arr = [ 2, 2, 3, 5, 6 ];
let n = arr.length;
document.write(minSum(arr, n));
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...