
位运算
文章平均质量分 64
相关总结及OJ练习
Ypuyu
Ypuyu
展开
-
[位运算+模板] 位运算模板
文章目录0. 前言1. n >> k 移位2. lowbit(x)2. n &= n - 1 0. 前言 位运算的东西很零散,模板不太好整理,大约见到了就会及时添加进来吧,顺便附上一道 OJ 练下手。 1. n >> k 移位 常见问题:n 的二进制表示中的第 k 位是几? 解答: n >> k & 1 2. lowbit(x) lowbit(x) 操作,返回 x 的二进制表示的最后一位 1。 lowbit(x) 也是树状数组的基本操作。 因为 -x 在计原创 2020-10-19 23:46:56 · 329 阅读 · 0 评论 -
[E位运算] lc342. 4的幂(位运算+lowbit操作+数学)
文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:342. 4的幂 前导题:[E位运算] lc231. 2 的幂(位运算+lowbit操作) 2. 题目解析 是 4^x 的话一定也是 2^x,且 4^x=2^2x,我们可以判断 n 是否是一个完全平方数,再判断其是否为 2^x 即可。注意在使用 sqrt() 过程中针对 INT_MIN 开方后,再相乘的话会爆 INT_MIN。 class Solution { public: bool isPowerOfFour(int n) {原创 2021-05-31 09:40:10 · 218 阅读 · 0 评论 -
[M位运算] lc477. 汉明距离总和(位运算+思维)
文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:477. 汉明距离总和 2. 题目解析 有点考思维,靠数据范围还是能猜出来做法的。 两个数同比特位 0 1 不同的话就贡献一个汉明距离。 显然,针对一个比特位考虑所有的数,若 1 有 a 个,0 有 b 个,则由乘法原理的话,可以贡献 a*b 个数对,也就是可以贡献 a*b 个汉明距离。 所以,针对每个比特位,遍历所有的数,同理当前比特位 0,1 的个数,相乘即是当前位所能贡献的汉明距离。 其实,这种求方案,求数对等问题,最终答案的范围是必须要考原创 2021-05-28 12:08:10 · 186 阅读 · 1 评论 -
[E位运算] lc461. 汉明距离(位运算+技巧)
文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:461. 汉明距离 2. 题目解析 首先问题可以转化为:求 x^y 中二进制表示下 1 的个数。 显然,移位操作可以做,树状数组的 lowbit() 操作也可以,使用 x &=(x-1) 清掉末尾 1 也是可以的。 时间复杂度:O(logn)O(logn)O(logn) 空间复杂度:O(1)O(1)O(1) 代码: // 直接移位 class Solution { public: int hammingDistance(int原创 2021-05-27 08:01:39 · 273 阅读 · 0 评论 -
[M位运算] lc1442. 形成两个异或相等数组的三元组数目(位运算+异或+算法优化+边界问题+好题)
文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:1442. 形成两个异或相等数组的三元组数目 十分推荐看看官方题解,很清楚。 2. 题目解析 很不错的一道题目,三重优化…我在第二层,没去往第三层… 思路: 方法一: 很明显使用异或前缀和,三重循环枚举三段分界点即可。时间复杂度 O(n3)O(n^3)O(n3)。 方法二: 由于本题的特殊的分段性,a = s[j - 1] ^ s[i - 1]; b = s[k] ^ s[j - 1]; 那么给 a、b 再同时异或一个 s[j - 1],就有 a原创 2021-05-18 10:59:16 · 146 阅读 · 0 评论 -
[M位运算] lc1829. 每个查询的最大异或值(思维+位运算+双周赛50_3)
文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:lc1828. 统计一个圆中点的数目 相关题目:[字典树] 最大异或对(trie+贪心) 2. 题目解析 虽说是个相关题目,其实解法上并不相关。最大异或对 是两个数之间的异或,而本题确实一堆数之间的异或。再细考虑一下,可以采用异或运算的性质直接解决。 思路: 前缀异或一个 0~2^k-1 值,保证异或值要最大,那么显然这个 2^k-1 值是可以取到的。只需要与前缀的异或值 0 1 取反即可。 由 a⊗b=ca \otimes b=ca⊗b=c,则原创 2021-04-19 16:25:06 · 169 阅读 · 0 评论