# Minimum operations to make XOR of array zero

We are given an array of n elements. The task is to make XOR of whole array 0. We can do following to achieve this.

1. We can select any one of the element.
2. After selecting element, we can either increment or decrement it by 1.

We need to find the minimum number of increment/decrement operation required for the selected element to make the XOR sum of whole array zero.

Examples :

```Input : arr[] = {2, 4, 8}
Output : Element = 8,
Operation required = 2
Explanation : Select 8 as element and perform 2
time decrement on it. So that it
became 6, Now our array is {2, 4, 6}
whose XOR sum is 0.

Input : arr[] = {1, 1, 1, 1}
Output : Element = 1,
Operation required = 0
Explanation : Select any of 1 and you have already
your XOR sum = 0. So, no operation
required.
```

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

Naive Approach : Select an element and then find the XOR of rest of the array. If that element became equals to XOR obtained then our XOR of the whole array should become zero. Now, our cost for that will be the absolute difference of selected element and obtained XOR. This process of finding cost will be done for each element and thus resulting into Time Complexity of (n^2).

Efficient Approach : Find the XOR of whole array. Now, suppose we have selected element arr[i], so cost required for that element will be absolute(arr[i]-(XORsum^arr[i])). Calculating minimum of these absolute values for each of element will be our minimum required operation also the element corresponding to minimum required operation will be our selected element.

## C++

 `// CPP to find min cost to make ` `// XOR of whole array zero ` `#include ` `using` `namespace` `std; ` ` `  `// function to find min cost ` `void` `minCost(``int` `arr[], ``int` `n) ` `{ ` `    ``int` `cost = INT_MAX; ` `    ``int` `element; ` ` `  `    ``// calculate XOR sum of array ` `    ``int` `XOR = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``XOR ^= arr[i]; ` ` `  `    ``// find the min cost and element corresponding ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``if` `(cost > ``abs``((XOR ^ arr[i]) - arr[i])) { ` `            ``cost = ``abs``((XOR ^ arr[i]) - arr[i]); ` `            ``element = arr[i]; ` `        ``} ` `    ``} ` ` `  `    ``cout << ``"Element = "` `<< element << endl; ` `    ``cout << ``"Operation required = "` `<< ``abs``(cost); ` `} ` ` `  `// driver program ` `int` `main() ` `{ ` `    ``int` `arr[] = { 2, 8, 4, 16 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``minCost(arr, n); ` `    ``return` `0; ` `} `

## Java

 `// JAVA program to find min cost to make ` `// XOR of whole array zero ` `import` `java.lang.*; ` ` `  `class` `GFG ` `{ ` `    ``// function to find min cost ` `    ``static` `void` `minCost(``int``[] arr, ``int` `n) ` `    ``{ ` `        ``int` `cost = Integer.MAX_VALUE; ` `        ``int` `element=``0``; ` ` `  `        ``// calculate XOR sum of array ` `        ``int` `XOR = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``XOR ^= arr[i]; ` ` `  `        ``// find the min cost and element  ` `        ``// corresponding ` `        ``for` `(``int` `i = ``0``; i < n; i++) { ` `            ``if` `(cost > Math.abs((XOR ^ arr[i]) ` `                                ``- arr[i])) { ` `                ``cost = Math.abs((XOR ^ arr[i]) - ` `                                       ``arr[i]); ` `                ``element = arr[i]; ` `            ``} ` `        ``} ` ` `  `    ``System.out.println(``"Element = "` `+ element); ` `    ``System.out.println(``"Operation required = "``+ ` `                             ``Math.abs(cost)); ` `    ``} ` ` `  `    ``// driver program ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int``[] arr = { ``2``, ``8``, ``4``, ``16` `}; ` `        ``int` `n = arr.length; ` `        ``minCost(arr, n); ` `    ``} ` `} ` `/* This code is contributed by Kriti Shukla */`

## Python3

 `# python to find min cost to make ` `# XOR of whole array zero ` ` `  `# function to find min cost ` `def` `minCost(arr,n): ` `     `  `    ``cost ``=` `999999``; ` `     `  `    ``# calculate XOR sum of array ` `    ``XOR ``=` `0``; ` `    ``for` `i ``in` `range``(``0``, n): ` `        ``XOR ^``=` `arr[i]; ` ` `  `    ``# find the min cost and element  ` `    ``# corresponding ` `    ``for` `i ``in` `range``(``0``,n): ` `        ``if` `(cost > ``abs``((XOR ^ arr[i]) ``-` `arr[i])): ` `            ``cost ``=` `abs``((XOR ^ arr[i]) ``-` `arr[i]) ` `            ``element ``=` `arr[i] ` ` `  `    ``print``(``"Element = "``, element) ` `    ``print``(``"Operation required = "``, ``abs``(cost)) ` ` `  ` `  `# driver program ` `arr ``=` `[ ``2``, ``8``, ``4``, ``16` `] ` `n ``=` `len``(arr) ` `minCost(arr, n) ` ` `  `# This code is contributed by Sam007 `

## C#

 `// C# program to find min cost to ` `// make XOR of whole array zero ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// function to find min cost ` `    ``static` `void` `minCost(``int` `[]arr, ``int` `n) ` `    ``{ ` `        ``int` `cost = ``int``.MaxValue; ` `        ``int` `element=0; ` ` `  `        ``// calculate XOR sum of array ` `        ``int` `XOR = 0; ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``XOR ^= arr[i]; ` ` `  `        ``// find the min cost and  ` `        ``// element corresponding ` `        ``for` `(``int` `i = 0; i < n; i++) ` `        ``{ ` `            ``if` `(cost > Math.Abs((XOR ^ arr[i]) - arr[i])) ` `            ``{ ` `                ``cost = Math.Abs((XOR ^ arr[i]) - arr[i]); ` `                ``element = arr[i]; ` `            ``} ` `        ``} ` ` `  `    ``Console.WriteLine(``"Element = "` `+ element); ` `    ``Console.Write(``"Operation required = "``+ ` `                          ``Math.Abs(cost)); ` `    ``} ` ` `  `    ``// Driver program ` `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``int` `[]arr = {2, 8, 4, 16}; ` `        ``int` `n = arr.Length; ` `        ``minCost(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal. `

## PHP

 ` ``abs``((``\$XOR` `^ ``\$arr``[``\$i``]) -  ` `                                 ``\$arr``[``\$i``])) ` `        ``{ ` `            ``\$cost` `= ``abs``((``\$XOR` `^ ``\$arr``[``\$i``]) -  ` `                                 ``\$arr``[``\$i``]); ` `            ``\$element` `= ``\$arr``[``\$i``]; ` `        ``} ` `    ``} ` ` `  `    ``echo` `"Element = "` `, ``\$element` `,``"\n"``; ` `    ``echo` `"Operation required = "` `, ``abs``(``\$cost``); ` `} ` ` `  `// Driver Code ` `\$arr` `= ``array``(2, 8, 4, 16) ; ` `\$n` `= ``count``(``\$arr``); ` `minCost(``\$arr``, ``\$n``); ` ` `  `// This code is contributed by vt_m. ` `?> `

Output:

```Element = 16
Operation required = 2
```

Time Complexity : O(n)

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.

My Personal Notes arrow_drop_up

Improved By : nitin mittal, vt_m, Sam007

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.