982. Triples with Bitwise AND Equal To Zero
题解
由于数组长度是1000,所以不能用n^3的算法。
因此考虑枚举两维。可以先将i & j的结果存到数组中,然后再进行k和 i& j结果的对比。
最终的复杂度是1000 * 65556的复杂度。
代码
class Solution {
public:
int countTriplets(vector<int>& nums) {
vector<int> ij(1 << 16, 0);
for (int i = 0; i < nums.size(); i ++) {
for (int j = 0; j < nums.size(); j ++) {
ij[nums[i] & nums[j]] ++;
}
}
int res = 0;
for (int k = 0; k < nums.size(); k ++) {
for (int i = 0; i < 1 << 16; i ++) {
// 这里需要区分优先级, &的优先级比==低
if ((nums[k] & i) == 0) {
res += ij[i];
}
}
}
return res;
}
};