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;}};
