Given an array arr[] of
Examples:
Input : N = 4, d = 2 arr[] = {1, 2, 4, 6} Output : 1 Explanation: change a[0]=0. So, new sequence is 0, 2, 4, 6 which is an AP. Input : N = 5, d = 1 arr[] = {1, 3, 3, 4, 6} Output : 2 Explanation: change a[1]=2 and a[4]=5. So, new sequence is 1, 2, 3, 4, 5 which is an AP.
The idea to solve this problem is to observe that the formulae for the n-th term in an AP are:
an = a0 + (n-1)*d Where, a0 is the first term and d is the common difference.
We are given the values of
Now, the minimum number of elements needed to be changed is:
n - (maximum frequency of a0)
Where maximum frequency of a0 signifies the total number of elements in the array for which the value of the first term in the AP is the same.
Below is the implementation of the above approach:
// C++ program to find the minimum number // of changes required to make the given // array an AP with common difference d #include <bits/stdc++.h> using namespace std;
// Function to find the minimum number // of changes required to make the given // array an AP with common difference d int minimumChanges( int arr[], int n, int d)
{ int maxFreq = INT_MIN;
// Map to store frequency of a0
unordered_map< int , int > freq;
// storing frequency of a0 for all possible
// values of a[i] and finding the maximum
// frequency
for ( int i = 0; i < n; ++i) {
int a0 = arr[i] - (i)*d;
// increment frequency by 1
if (freq.find(a0) != freq.end()) {
freq[a0]++;
}
else
freq.insert(make_pair(a0, 1));
// finds count of most frequent number
if (freq[a0] > maxFreq)
maxFreq = freq[a0];
}
// minimum number of elements needed to
// be changed is: n - (maximum frequency of a0)
return (n - maxFreq);
} // Driver Program int main()
{ int n = 5, d = 1;
int arr[] = { 1, 3, 3, 4, 6 };
cout << minimumChanges(arr, n, d);
return 0;
} |
// Java program to find the // minimum number of changes // required to make the given // array an AP with common // difference d import java.util.*;
class GFG {
// Function to find the minimum
// number of changes required
// to make the given array an
// AP with common difference d
static int minimumChanges( int arr[],
int n, int d)
{
int maxFreq = - 1 ;
// Map to store frequency of a0
HashMap<Integer,
Integer>
freq = new HashMap<Integer,
Integer>();
// storing frequency of a0 for
// all possible values of a[i]
// and finding the maximum
// frequency
for ( int i = 0 ; i < n; ++i) {
int a0 = arr[i] - (i)*d;
// increment frequency by 1
if (freq.containsKey(a0)) {
freq.put(a0, freq.get(a0) + 1 );
}
else
freq.put(a0, 1 );
// finds count of most
// frequent number
if (freq.get(a0) > maxFreq)
maxFreq = freq.get(a0);
}
// minimum number of elements
// needed to be changed is:
// n - (maximum frequency of a0)
return (n - maxFreq);
}
// Driver Code
public static void main(String args[])
{
int n = 5 , d = 1 ;
int arr[] = { 1 , 3 , 3 , 4 , 6 };
System.out.println(minimumChanges(arr, n, d));
}
} // This code is contributed // by Arnab Kundu |
# Python3 program to find the minimum # number of changes required to make # the given array an AP with common # difference d # Function to find the minimum number # of changes required to make the given # array an AP with common difference d def minimumChanges(arr, n, d):
maxFreq = - 2147483648
# dictionary to store
# frequency of a0
freq = {}
# storing frequency of a0 for
# all possible values of a[i]
# and finding the maximum'
# frequency
for i in range (n):
a0 = arr[i] - i * d
# increment frequency by 1
if a0 in freq:
freq[a0] + = 1
else :
freq[a0] = 1
# finds count of most
# frequent number
if freq[a0] > maxFreq:
maxFreq = freq[a0]
# minimum number of elements
# needed to be changed is:
# n - (maximum frequency of a0)
return (n - maxFreq)
# Driver Code # number of terms in ap n = 5
# difference in AP d = 1
arr = [ 1 , 3 , 3 , 4 , 6 ]
ans = minimumChanges(arr, n, d)
print (ans)
# This code is contributed # by sahil shelangia |
// C# program to find the // minimum number of changes // required to make the given // array an AP with common // difference d using System;
using System.Collections.Generic;
class GFG {
// Function to find the minimum
// number of changes required
// to make the given array an
// AP with common difference d
static int minimumChanges( int [] arr,
int n, int d)
{
int maxFreq = -1;
// Map to store frequency of a0
Dictionary< int , int > freq = new Dictionary< int , int >();
// storing frequency of a0 for
// all possible values of a[i]
// and finding the maximum
// frequency
for ( int i = 0; i < n; ++i) {
int a0 = arr[i] - (i)*d;
// increment frequency by 1
if (freq.ContainsKey(a0)) {
var obj = freq[a0];
freq.Remove(a0);
freq.Add(a0, obj + 1);
}
else
freq.Add(a0, 1);
// finds count of most
// frequent number
if (freq[a0] > maxFreq)
maxFreq = freq[a0];
}
// minimum number of elements
// needed to be changed is:
// n - (maximum frequency of a0)
return (n - maxFreq);
}
// Driver Code
public static void Main(String[] args)
{
int n = 5, d = 1;
int [] arr = { 1, 3, 3, 4, 6 };
Console.WriteLine(minimumChanges(arr, n, d));
}
} // This code contributed by Rajput-Ji |
<?php // PHP program to find the minimum number // of changes required to make the given // array an AP with common difference d // Function to find the minimum number // of changes required to make the given // array an AP with common difference d function minimumChanges(& $arr , $n , $d )
{ $maxFreq = PHP_INT_MIN;
// array to store frequency of a0
$freq = array ();
// storing frequency of a0 for
// all possible values of a[i]
// and finding the maximum
// frequency
for ( $i = 0; $i < $n ; ++ $i )
{
$a0 = $arr [ $i ] - ( $i ) * $d ;
// increment frequency by 1
if ( array_search ( $a0 , $freq ))
{
$freq [ $a0 ]++;
}
else
$freq [ $a0 ] = 1;
// finds count of most
// frequent number
if ( $freq [ $a0 ] > $maxFreq )
$maxFreq = $freq [ $a0 ];
}
// minimum number of elements
// needed to be changed is:
// $n - (maximum frequency of a0)
return ( $n - $maxFreq );
} // Driver Code $n = 5;
$d = 1;
$arr = array ( 1, 3, 3, 4, 6 );
echo minimumChanges( $arr , $n , $d );
// This code is contributed // by ChitraNayal ?> |
<script> // Javascript program to find the // minimum number of changes // required to make the given // array an AP with common // difference d // Function to find the minimum
// number of changes required
// to make the given array an
// AP with common difference d
function minimumChanges(arr,n,d)
{
let maxFreq = -1;
// Map to store frequency of a0
let freq = new Map();
// storing frequency of a0 for
// all possible values of a[i]
// and finding the maximum
// frequency
for (let i = 0; i < n; ++i) {
let a0 = arr[i] - (i)*d;
// increment frequency by 1
if (freq.has(a0)) {
freq.set(a0, freq.get(a0) + 1);
}
else
freq.set(a0, 1);
// finds count of most
// frequent number
if (freq.get(a0) > maxFreq)
maxFreq = freq.get(a0);
}
// minimum number of elements
// needed to be changed is:
// n - (maximum frequency of a0)
return (n - maxFreq);
}
// Driver Code
let n = 5, d = 1;
let arr=[ 1, 3, 3, 4, 6];
document.write(minimumChanges(arr, n, d));
// This code is contributed by avanitrachhadiya2155 </script> |
Output
2
Complexity Analysis:
- Time Complexity: O(N)
- Auxiliary Space: O(N)