Given an array arr[], the task is to find an element that can be added to the array in order to convert it to Arithmetic Progression. If it’s impossible to convert the given array into an AP, then print -1.
Examples:
Input: arr[] = {3, 7}
Output: 11
3, 7 and 11 is a finite AP sequence.
Input: a[] = {4, 6, 8, 15}
Output: -1
Approach:
- Sort the array and start traversing the array element by element and note the difference between the two consecutive elements.
- If the difference for all the elements is the same then print last element + common difference.
- If the difference is different for at most one pair (arr[i – 1], arr[i]) and diff = 2 * common difference for all other elements, then print arr[i] – common difference.
- Else print -1.
Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int getNumToAdd( int arr[], int n)
{
sort(arr,arr+n);
int d = arr[1] - arr[0];
int numToAdd = -1;
bool numAdded = false ;
for ( int i = 2; i < n; i++) {
int diff = arr[i] - arr[i - 1];
if (diff != d) {
if (numAdded)
return -1;
if (diff == 2 * d) {
numToAdd = arr[i] - d;
numAdded = true ;
}
else
return -1;
}
}
if (numToAdd == -1)
return (arr[n - 1] + d);
return numToAdd;
}
int main()
{
int arr[] = { 1, 3, 5, 7, 11, 13, 15 };
int n = sizeof (arr)/ sizeof (arr[0]);
cout << getNumToAdd(arr, n);
}
|
Java
import java.util.*;
public class GFG {
static int getNumToAdd( int arr[], int n)
{
Arrays.sort(arr);
int d = arr[ 1 ] - arr[ 0 ];
int numToAdd = - 1 ;
boolean numAdded = false ;
for ( int i = 2 ; i < n; i++) {
int diff = arr[i] - arr[i - 1 ];
if (diff != d) {
if (numAdded)
return - 1 ;
if (diff == 2 * d) {
numToAdd = arr[i] - d;
numAdded = true ;
}
else
return - 1 ;
}
}
if (numToAdd == - 1 )
return (arr[n - 1 ] + d);
return numToAdd;
}
public static void main(String[] args)
{
int arr[] = { 1 , 3 , 5 , 7 , 11 , 13 , 15 };
int n = arr.length;
System.out.println(getNumToAdd(arr, n));
}
}
|
Python3
def getNumToAdd(arr, n):
arr.sort(reverse = False )
d = arr[ 1 ] - arr[ 0 ]
numToAdd = - 1
numAdded = False
for i in range ( 2 , n, 1 ):
diff = arr[i] - arr[i - 1 ]
if (diff ! = d):
if (numAdded):
return - 1
if (diff = = 2 * d):
numToAdd = arr[i] - d
numAdded = True
else :
return - 1
if (numToAdd = = - 1 ):
return (arr[n - 1 ] + d)
return numToAdd
if __name__ = = '__main__' :
arr = [ 1 , 3 , 5 , 7 , 11 , 13 , 15 ]
n = len (arr)
print (getNumToAdd(arr, n))
|
C#
using System;
public class GFG {
static int getNumToAdd( int []arr, int n)
{
Array.Sort(arr);
int d = arr[1] - arr[0];
int numToAdd = -1;
bool numAdded = false ;
for ( int i = 2; i < n; i++) {
int diff = arr[i] - arr[i - 1];
if (diff != d) {
if (numAdded)
return -1;
if (diff == 2 * d) {
numToAdd = arr[i] - d;
numAdded = true ;
}
else
return -1;
}
}
if (numToAdd == -1)
return (arr[n - 1] + d);
return numToAdd;
}
public static void Main()
{
int []arr = { 1, 3, 5, 7, 11, 13, 15 };
int n = arr.Length;
Console.WriteLine(getNumToAdd(arr, n));
}
}
|
PHP
<?php
function getNumToAdd( $arr , $n )
{
sort( $arr );
$d = $arr [1] - $arr [0];
$numToAdd = -1;
$numAdded = false;
for ( $i = 2; $i < $n ; $i ++)
{
$diff = $arr [ $i ] - $arr [ $i - 1];
if ( $diff != $d )
{
if ( $numAdded )
return -1;
if ( $diff == 2 * $d )
{
$numToAdd = $arr [ $i ] - $d ;
$numAdded = true;
}
else
return -1;
}
}
if ( $numToAdd == -1)
return ( $arr [ $n - 1] + $d );
return $numToAdd ;
}
$arr = array ( 1, 3, 5, 7, 11, 13, 15 );
$n = sizeof( $arr );
echo getNumToAdd( $arr , $n );
?>
|
Javascript
<script>
function getNumToAdd(arr, n)
{
arr.sort( function (a, b){ return a - b});
var d = arr[1] - arr[0];
var numToAdd = -1;
var numAdded = false ;
for ( var i = 2; i < n; i++)
{
var diff = arr[i] - arr[i - 1];
if (diff != d)
{
if (numAdded)
return -1;
if (diff == 2 * d)
{
numToAdd = arr[i] - d;
numAdded = true ;
}
else
return -1;
}
}
if (numToAdd == -1)
return (arr[n - 1] + d);
return numToAdd;
}
var arr = [ 1, 3, 5, 7, 11, 13, 15 ];
var n = arr.length;
document.write(getNumToAdd(arr, n));
</script>
|
Complexity Analysis:
- Time Complexity : O(n Log n)
- Space Complexity: O(1) since only using constant variable
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
13 Sep, 2022
Like Article
Save Article