参考


公式1 (x & y) + ((x ^ y) >> 1) 结果时向下取整

这样求X,Y的平均值时就不会出现int或long long超出范围的情况了,并且精度不丢失
若先x+y可能会超出范围

在二分时求mid = (l + r) / 2, 用这种方法很好!


推导

因为二进制数字都是一串0和1,那么可以把整数x和y都看作是一个有很多不同的0和1组成的集合。
位运算小技巧—求中位数
求这两个集合的平均值就是 交集+差集的一半
交集x&y
差集的一半x^y >>1
位运算小技巧—求中位数


公式2 (x | y) - ((x ^ y) >> 1) 结果时向上取整

求这两个集合的平均值就是 并集 - 差集的一半
并集x|y
差集的一半x^y >>1


相关文章:

  • 2021-09-06
  • 2021-09-17
  • 2022-03-04
  • 2021-05-27
  • 2021-08-06
  • 2022-12-23
  • 2021-10-18
猜你喜欢
  • 2021-07-29
  • 2022-02-09
  • 2021-10-18
相关资源
相似解决方案