c++ - BIT WISE AND 的完美广场
问题描述
对子数组进行按位与运算时,如何优化计算连续子数组的完全平方数的解决方案。时间复杂度应该是 O(n) 或 O(n*logn)。
这是天真的方法
int a[]={1,2,3,4,5,6};
int l=2,r=5;
int c=0; // for counting the subsets
for(int i=l;i<=r;i++){
int val=a[i];
for(int j=i;j<=r;j++){
val=val&a[j];
if(isPerfectSquare(val)){
c+=1;
}
}
}
解决方案
您可以制作数字位的 Trie 数据结构并继续插入 pre_and。此外,请记住让 Node 结构存储数字的索引,以便您可以针对给定范围运行查询。现在剩下的就是计算 AND 结果是否是一个完美的正方形。自己试试吧。提示就足够了。你可以参考这个
推荐阅读
- r - 在 R 中执行 Postgres 函数
- python - DataFrame.where,使用数组作为条件时出错
- python - 我有一个包含 130 个变量的数据集,我必须检查所有变量的相关性,有什么方法可以检查一次
- ios - 观察 NSManagedObject 变量上的 didSet
- flutter - 将 Flutter 动画场景编码为视频文件
- html - 如何防止孩子在flexbox中超出其父宽度?
- excel - 输出字符串文本数组,但在代码字典数组中我有两个具有相同字母的字符串
- javascript - 错误类型错误:无法读取未定义的属性“替换”
- python - 在有向图中查找结束节点
- android - 当有一个带按钮的 RecyclerView 时,SetFocus 无法使用硬件键盘处理 Activity 的 EditText