位运算与数学

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

位运算与数学

数据结构与算法·面试高频 · 第 4 章 算法思想

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

位运算与数学

数据结构与算法·面试高频 · 第 4 章 算法思想

1第 1 页 · 位运算与数学

异或性质应用

异或是「不同为真」:自反、交换、结合,成对出现就互相抵消。

三大性质
a^a=0、a^0=a,交换结合可任意重排
找单个
全员异或,成对消光后只剩孤儿
分组找双
按某位 0/1 分两拨,各自再异或出两个
2第 2 页 · 异或性质应用

n & (n-1) 技巧

消去最右边的 1:一位一位消,消几次就是 1 的个数。

消除末 1
n&(n−1) 精准抹掉最低位的 1
计数
循环到 0,执行次数即 1 位个数
判 2 的幂
2 的幂仅一位 1,n&(n−1)==0 即是
3第 3 页 · n & (n-1) 技巧

快速幂

幂次折半:平方一次指数减半,O(log n) 算大幂,负指数取倒数。

折半
x^n = (x²)^(n/2),奇数额外乘一个 x
取模
每乘一次取一次模,防溢出并保表达式
推广
矩阵快速幂加速线性递推计算
4第 4 页 · 快速幂

数字溢出处理

加法先移项再比,乘法先除后比:溢出要在发生之前拦截。

加法
a+b>MAX 判 a>MAX−b,先移项防溢出
乘法
a×b>MAX 转 a>MAX/b 的除法预判
中点
mid = l+(r−l)/2,防 (l+r) 先溢出
5第 5 页 · 数字溢出处理

本节要点

  • ✓异或:成对消失,分组找双孤
  • ✓n&(n−1):消末位 1,数 1 判幂
  • ✓快速幂:折半取模,log n 量级
  • ✓溢出:移项预判,中点偏移
延伸主题:刷只出现一次的数字实现一遍 pow(x,n)
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1两个孤儿数字的题,为什么要按位分组?

参考答案全员异或得到两孤儿的异或值 x,x 任意为 1 的位说明两数在该位不同;按该位把全体分两组,组内成对相消,两组各剩一个孤儿。

2快速幂为什么比连乘快?快在哪?

参考答案连乘是 O(n) 次乘法;折半让指数每次砍半,只需 O(log n) 次。指数 2^30 时从十亿次乘法降到三十次,量级差距随指数指数级拉开。

3mid=(l+r)/2 在什么场景会真的溢出?

参考答案l、r 都接近类型上限时 l+r 先溢出。l+(r−l)/2 数学等价且中间量不超界,是防御性写法——不是每题都触发,但成本为零。

7第 7 页 · 课后思考