# Minimum operations required to change the array such that |arr[i] – M| <= 1

Given an **array[]** of integers, the task is to find the minimum number of operations required to change the array elements such that for any positive integer **M**, **|arr[i] – M| ≤ 1** for all valid **i**.

In a single operation, any element of the array can either be incremented or decremented by 1.**Examples:**

Input:arr[] = {10, 1, 4}Output:7

If we change 1 into 2 and 10 into 4 with count of operations being |1 – 2| + |10 – 4| = 7

After changing, array becomes {4, 2, 4} where every element’s absolute difference with M = 3 is ≤ 1Input:arr[] = {5, 7, 4, 1, 4}Output:4

**Approach:** Starting from the minimum element of the array to the maximum element of the array say **num**, calculate the count of operations required to change every element such that its absolute difference with **num** is **≤ 1**. The minimum among all possible operations is the required answer.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the minimum` `// number of operations required` `int` `changeTheArray(` `int` `arr[], ` `int` `n)` `{` ` ` `// Minimum and maximum elements from the array` ` ` `int` `minEle = *(std::min_element(arr, arr + n));` ` ` `int` `maxEle = *(std::max_element(arr, arr + n));` ` ` `// To store the minimum number of` ` ` `// operations required` ` ` `int` `minOperations = INT_MAX;` ` ` `for` `(` `int` `num = minEle; num <= maxEle; num++) {` ` ` `// To store the number of operations required` ` ` `// to change every element to either` ` ` `// (num - 1), num or (num + 1)` ` ` `int` `operations = 0;` ` ` `for` `(` `int` `i = 0; i < n; i++) {` ` ` `// If current element is not already num` ` ` `if` `(arr[i] != num) {` ` ` `// Add the count of operations` ` ` `// required to change arr[i]` ` ` `operations += (` `abs` `(num - arr[i]) - 1);` ` ` `}` ` ` `}` ` ` `// Update the minimum operations so far` ` ` `minOperations = min(minOperations, operations);` ` ` `}` ` ` `return` `minOperations;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `arr[] = { 10, 1, 4 };` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]);` ` ` `cout << changeTheArray(arr, n);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `import` `java.util.*;` `class` `GFG {` ` ` `// Function to return the minimum` ` ` `// number of operations required` ` ` `static` `int` `changeTheArray(` `int` `arr[], ` `int` `n)` ` ` `{` ` ` `// Minimum and maximum elements from the array` ` ` `int` `minEle = Arrays.stream(arr).min().getAsInt();` ` ` `int` `maxEle = Arrays.stream(arr).max().getAsInt();` ` ` `// To store the minimum number of` ` ` `// operations required` ` ` `int` `minOperations = Integer.MAX_VALUE;` ` ` `for` `(` `int` `num = minEle; num <= maxEle; num++) {` ` ` `// To store the number of operations required` ` ` `// to change every element to either` ` ` `// (num - 1), num or (num + 1)` ` ` `int` `operations = ` `0` `;` ` ` `for` `(` `int` `i = ` `0` `; i < n; i++) {` ` ` `// If current element is not already num` ` ` `if` `(arr[i] != num) {` ` ` `// Add the count of operations` ` ` `// required to change arr[i]` ` ` `operations += (Math.abs(num - arr[i]) - ` `1` `);` ` ` `}` ` ` `}` ` ` `// Update the minimum operations so far` ` ` `minOperations = Math.min(minOperations, operations);` ` ` `}` ` ` `return` `minOperations;` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `main(String args[])` ` ` `{` ` ` `int` `arr[] = { ` `10` `, ` `1` `, ` `4` `};` ` ` `int` `n = arr.length;` ` ` `System.out.println(changeTheArray(arr, n));` ` ` `}` `}` `// This code has been contributed by 29AjayKumar` |

## Python3

`# Python3 implementation of the approach` `import` `math` `import` `sys` `# Function to return the minimum` `# number of operations required` `def` `changeTheArray(arr, n):` ` ` ` ` `# Minimum and maximum elements` ` ` `# from the array` ` ` `minEle ` `=` `min` `(arr)` ` ` `maxEle ` `=` `max` `(arr)` ` ` `# To store the minimum number of` ` ` `# operations required` ` ` `minOperations ` `=` `sys.maxsize` ` ` `for` `num ` `in` `range` `(minEle, maxEle ` `+` `1` `):` ` ` ` ` `# To store the number of operations required` ` ` `# to change every element to either` ` ` `# (num - 1), num or (num + 1)` ` ` `operations ` `=` `0` ` ` `for` `i ` `in` `range` `(n):` ` ` `# If current element is not already num` ` ` `if` `arr[i] !` `=` `num:` ` ` `operations ` `+` `=` `(` `abs` `(num ` `-` `arr[i]) ` `-` `1` `)` ` ` ` ` `# Update the minimum operations so far` ` ` `minOperations ` `=` `min` `(minOperations, operations)` ` ` `return` `minOperations` `# Driver code` `if` `__name__` `=` `=` `'__main__'` `:` ` ` `arr ` `=` `[` `10` `, ` `1` `, ` `4` `]` ` ` `n ` `=` `len` `(arr)` ` ` `print` `(changeTheArray(arr, n))` `# This code is contributed by Vikash Kumar 37` |

## C#

`// C# implementation of the approach` `using` `System;` `using` `System.Linq;` `class` `GFG` `{` ` ` `// Function to return the minimum` ` ` `// number of operations required` ` ` `static` `int` `changeTheArray(` `int` `[]arr, ` `int` `n)` ` ` `{` ` ` `// Minimum and maximum elements from the array` ` ` `int` `minEle = arr.Min();` ` ` `int` `maxEle = arr.Max();` ` ` `// To store the minimum number of` ` ` `// operations required` ` ` `int` `minOperations = ` `int` `.MaxValue;` ` ` `for` `(` `int` `num = minEle; num <= maxEle; num++)` ` ` `{` ` ` `// To store the number of operations required` ` ` `// to change every element to either` ` ` `// (num - 1), num or (num + 1)` ` ` `int` `operations = 0;` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `{` ` ` `// If current element is not already num` ` ` `if` `(arr[i] != num)` ` ` `{` ` ` `// Add the count of operations` ` ` `// required to change arr[i]` ` ` `operations += (Math.Abs(num - arr[i]) - 1);` ` ` `}` ` ` `}` ` ` `// Update the minimum operations so far` ` ` `minOperations = Math.Min(minOperations, operations);` ` ` `}` ` ` `return` `minOperations;` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `Main(String []args)` ` ` `{` ` ` `int` `[]arr = { 10, 1, 4 };` ` ` `int` `n = arr.Length;` ` ` `Console.WriteLine(changeTheArray(arr, n));` ` ` `}` `}` `// This code is contributed by Rajput-Ji` |

## Javascript

`<script>` `// Javascript implementation of the approach` `// Function to return the minimum` `// number of operations required` `function` `changeTheArray(arr, n)` `{` ` ` `// Minimum and maximum elements from the array` ` ` `let minEle = Math.min(...arr);` ` ` `let maxEle = Math.max(...arr);` ` ` `// To store the minimum number of` ` ` `// operations required` ` ` `let minOperations = Number.MAX_VALUE;` ` ` `for` `(let num = minEle; num <= maxEle; num++) {` ` ` `// To store the number of operations required` ` ` `// to change every element to either` ` ` `// (num - 1), num or (num + 1)` ` ` `let operations = 0;` ` ` `for` `(let i = 0; i < n; i++) {` ` ` `// If current element is not already num` ` ` `if` `(arr[i] != num) {` ` ` `// Add the count of operations` ` ` `// required to change arr[i]` ` ` `operations += (Math.abs(num - arr[i]) - 1);` ` ` `}` ` ` `}` ` ` `// Update the minimum operations so far` ` ` `minOperations = Math.min(minOperations, operations);` ` ` `}` ` ` `return` `minOperations;` `}` `// Driver code` ` ` `let arr = [ 10, 1, 4 ];` ` ` `let n = arr.length;` ` ` `document.write(changeTheArray(arr, n));` `</script>` |

**Output:**

7

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**.