使用C++查找XOR值为零的唯一三元组的数量
在本文中,我们将讨论如何在一个给定的唯一数字数组中计算唯一三元组 (x, y, z) 的数量,其中它们的XOR值为0。因此,三元组应该是唯一的,所有三个元素都是唯一的,并且将计算所有三元组的组合,例如:
Input : arr[ ] = { 5, 6, 7, 1, 3 } Output : 2 Explanation : triplets are { 5, 6, 3 } and { 6, 7, 1 } whose XOR is zero. Input : arr[ ] = { 3, 6, 8, 1, 5, 4 , 12} Output : 3 Explanation : Triplets are { 3, 6, 5 }, { 1, 5, 4 } and { 4, 8, 12 } whose XOR is zero.
寻找解决方案的方法
我们知道相同值的XOR总是为零。所以我们找到唯一的三元组,可以使用一种乐观的方法,即找到数组中两个值的XOR并存储结果,然后在数组中搜索等于该结果的值。此外,结果值不应等于对中的任何值。寻找:
示例
#include <bits/stdc++.h> using namespace std; int main () { int arr[] = { 3, 6, 8, 1, 5, 4, 12 }; int n = sizeof (arr) / sizeof (arr[0]); int result; // count variable to keep count of pairs. int count = 0; // creating a set to store unique numbers . unordered_set < int >values; // inserting values in set. for (int i = 0; i < n; i++) values.insert (arr[i]); // traverse for all pairs to calculate XOR. for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { // finding xor of i, j pair. int XR = arr[i] ^ arr[j]; // checking if XOR value of pair present in array // and value should not be in pairs. if (values.find (XR) != values.end () && XR != arr[i] && XR != arr[j]) count++; } } // storing result result = count / 3; cout << "Number of unique triplets : " << result; return 0; }
输出
Number of unique triplets : 3
以上代码的解释
- 创建一个无序集合`unordered_set
values;` 来存储给定数组的唯一数字。 - 使用`for()`循环使用`values.insert(arr[i])`将值插入集合。
- 使用两个嵌套循环遍历所有对并计算它们的XOR值。
- 然后,在数组中搜索XOR值,如果在数组中找到该值且不在对中,则递增计数。
- 将结果存储为`count / 3`,这将计算三元组的三种组合,而我们需要唯一的三元组。
结论
本文讨论了如何查找XOR值为0的三元组的数量;我们讨论了一种查找唯一三元组的乐观方法。我们还讨论了用于解决该问题的C++程序。但是,我们可以使用其他编程语言(如Java、C、Python等)编写此程序。我们希望您觉得本文有所帮助。
广告