思路
题目地址:https://leetcode-cn.com/problems/triples-with-bitwise-and-equal-to-zero/
思路:上来就是3重循环暴力一波,超时了。后来想到可以把第1个和第2个数与操作的返回值缓存一下,如213和123,暴力的话得4次运算。缓存一下的话用3次运算。能省下不少时间,而且0 <= A[i] < 2^16,所以2个数与操作的话最后的值一定小于2^16,所以用数组存了映射关系,没有用HashMap。两者差异不是很大,看具体数据了
看到有人用DP做出这道题,跪了,跪了。
代码
public class Solution {
public int countTriplets(int[] A) {
int count = 0;
int[] resultMap = new int[1 << 16];
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < A.length; j++) {
resultMap[A[i] & A[j]]++;
}
}
for (int i = 0; i < resultMap.length; i++) {
if (resultMap[i] == 0) {
continue;
}
for (int j = 0; j < A.length; j++) {
if ((i & A[j]) == 0) {
count += resultMap[i];
}
}
}
return count;
}
}