คำอธิบายปัญหา
ให้อาร์เรย์ A หาจำนวนทริปเปิล (i,j,k) ที่ 0≤i,j,k A = [3,1,2] → Output: 12 (A[i] & A[j] & A[k]) == 0 ⇔ ((A[i] & A[j]) & A[k]) == 0ตัวอย่าง
แนวทางแก้ปัญหา: Precompute Pair AND + Lookup
เหตุผลที่ทำงานได้
ให้ pair_and = A[i] & A[j] ต้องการ pair_and & A[k] == 0ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countTriplets(vector<int>& A) {
unordered_map<int,int> m;
int n = A.size();
// Precompute all pair ANDs
for(int i=0; iความซับซ้อน