Related Articles
Find the minimum value of X for an expression
• Last Updated : 17 Mar, 2021

Given an array arr[]. The task is t find the value of X such that the result of the expression (A – X)^2 + (A – X)^2 + (A – X)^2 + … (A[n-1] – X)^2 + (A[n] – X)^2 is minimum possible.
Examples :

Input : arr[] = {6, 9, 1, 6, 1, 3, 7}
Output : 5
Input : arr[] = {1, 2, 3, 4, 5}
Output :

Approach:
We can simplify the expression that we need to minimize. The expression can be written as

`(A^2 + A^2 + A^2 + … + A[n]^2) + nX^2 – 2X(A + A + A + … + A[n])`

On differentiating the above expression, we get

` 2nX - 2(A + A + A + … + A[n])`

We can denote the term (A + A + A + … + A[n] ) as S. We get

` 2nX - 2S `

Putting 2nX – 2S = 0, we get

` X = S/N `

Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach` `#include ``using` `namespace` `std;` `// Function to calculate value of X``int` `valueofX(``int` `ar[], ``int` `n)``{``    ``int` `sum = 0;``    ``for` `(``int` `i = 0; i < n; i++) {``        ``sum = sum + ar[i];``    ``}` `    ``if` `(sum % n == 0) {``        ``return` `sum / n;``    ``}``    ``else` `{``        ``int` `A = sum / n, B = sum / n + 1;``        ``int` `ValueA = 0, ValueB = 0;` `        ``// Check for both possibilities``        ``for` `(``int` `i = 0; i < n; i++) {``            ``ValueA += (ar[i] - A) * (ar[i] - A);``            ``ValueB += (ar[i] - B) * (ar[i] - B);``        ``}` `        ``if` `(ValueA < ValueB) {``            ``return` `A;``        ``}``        ``else` `{``            ``return` `B;``        ``}``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `n = 7;``    ``int` `arr = { 6, 9, 1, 6, 1, 3, 7 };` `    ``cout << valueofX(arr, n) << ``'\n'``;` `    ``return` `0;``}`

## Java

 `// Java implementation of above approach``class` `GFG``{` `// Function to calculate value of X``static` `int` `valueofX(``int` `ar[], ``int` `n)``{``    ``int` `sum = ``0``;``    ``for` `(``int` `i = ``0``; i < n; i++)``    ``{``        ``sum = sum + ar[i];``    ``}` `    ``if` `(sum % n == ``0``)``    ``{``        ``return` `sum / n;``    ``}``    ``else``    ``{``        ``int` `A = sum / n, B = sum / n + ``1``;``        ``int` `ValueA = ``0``, ValueB = ``0``;` `        ``// Check for both possibilities``        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{``            ``ValueA += (ar[i] - A) * (ar[i] - A);``            ``ValueB += (ar[i] - B) * (ar[i] - B);``        ``}` `        ``if` `(ValueA < ValueB)``        ``{``            ``return` `A;``        ``}``        ``else``        ``{``            ``return` `B;``        ``}``    ``}``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `n = ``7``;``    ``int` `arr[] = { ``6``, ``9``, ``1``, ``6``, ``1``, ``3``, ``7` `};` `    ``System.out.println(valueofX(arr, n));``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 implementation of above approach` `# Function to calculate value of X``def` `valueofX(ar, n):``    ``summ ``=` `sum``(ar)` `    ``if` `(summ ``%` `n ``=``=` `0``):``        ``return` `summ ``/``/` `n``    ``else``:``        ``A ``=` `summ ``/``/` `n``        ``B ``=` `summ ``/``/` `n ``+` `1``        ``ValueA ``=` `0``        ``ValueB ``=` `0` `        ``# Check for both possibilities``        ``for` `i ``in` `range``(n):``            ``ValueA ``+``=` `(ar[i] ``-` `A) ``*` `(ar[i] ``-` `A)``            ``ValueB ``+``=` `(ar[i] ``-` `B) ``*` `(ar[i] ``-` `B)` `        ``if` `(ValueA < ValueB):``            ``return` `A``        ``else``:``            ``return` `B` `# Driver Code``n ``=` `7``arr ``=` `[``6``, ``9``, ``1``, ``6``, ``1``, ``3``, ``7``]` `print``(valueofX(arr, n))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# implementation of above approach``using` `System;``                    ` `class` `GFG``{` `// Function to calculate value of X``static` `int` `valueofX(``int` `[]ar, ``int` `n)``{``    ``int` `sum = 0;``    ``for` `(``int` `i = 0; i < n; i++)``    ``{``        ``sum = sum + ar[i];``    ``}` `    ``if` `(sum % n == 0)``    ``{``        ``return` `sum / n;``    ``}``    ``else``    ``{``        ``int` `A = sum / n, B = sum / n + 1;``        ``int` `ValueA = 0, ValueB = 0;` `        ``// Check for both possibilities``        ``for` `(``int` `i = 0; i < n; i++)``        ``{``            ``ValueA += (ar[i] - A) * (ar[i] - A);``            ``ValueB += (ar[i] - B) * (ar[i] - B);``        ``}` `        ``if` `(ValueA < ValueB)``        ``{``            ``return` `A;``        ``}``        ``else``        ``{``            ``return` `B;``        ``}``    ``}``}` `// Driver Code``public` `static` `void` `Main(String []args)``{``    ``int` `n = 7;``    ``int` `[]arr = { 6, 9, 1, 6, 1, 3, 7 };` `    ``Console.WriteLine(valueofX(arr, n));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output:
`5`

Time Complexity: O(n)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up