Related Articles

# Minimum number of changes required to make the given array an AP

• Difficulty Level : Medium
• Last Updated : 14 May, 2021

Given an array arr[] of integers and a number . You can change any element of the array to an integer. The task is to find the minimum number of change(s) required to make the given array an Arithmetic Progression with the common difference .

Examples:

```Input : N = 4, d = 2
arr[] = {1, 2, 4, 6}
Output : 1
Explanation: change a=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=2 and a=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 and an. So, we will find the value of a0 for all values of i, where 1<=i<=n and store the frequency of occurrences of a0 for different values of i.
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++

 `// C++ program to find the minimum number``// of changes required to make the given``// array an AP with common difference d``#include ``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

 `// 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``            ``freq = ``new` `HashMap();` `        ``// 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

 `# 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#

 `// 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

 ` ``\$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``?>`

## Javascript

 ``
Output:
`2`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up