# Find the minimum value of X for an expression

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 : 3

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 `

Output:

```5
```

Time Complexity: O(n)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.