982. 按位与为零的三元组(位运算)
题目
思路
- 参考灵神题解,非常易懂,总结一些方法
- 状态压缩常用找下 x 的一个子集(关于1):
(再加上一个全0的情况) - 上面的时间复杂度接近
的,所以先对任意两个数字的与hash会超时,但是换一个方向容易发现n是很小的 - 所以先找一个数字二进制补集的子集,然后再枚举任意两个数字的与,累加
代码
class Solution {
public:
int countTriplets(vector<int>& nums) {
int n = nums.size();
int bit1[1 << 16] = {0};
bit1[0] = nums.size();
for(auto x:nums)
{
int s = x ^ ((1 << 16) - 1);
for(int y = s;y;y = (y - 1) & s)
bit1[y] ++;
}
int ans = 0;
for(auto x:nums)
for(auto y:nums)
ans += bit1[x&y];
return ans;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具