使用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等)編寫此程式。我們希望您覺得本文有所幫助。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP