求中点不溢出的方法

396 阅读1分钟

背景

计算两数的中点,使用 int mid = (left + right) / 2 求mid时,可能 left + right 时就发生溢出,导致mid的结果也不正确

解决办法

int mid = left + (right - left) / 2

right - left肯定是不溢出的, (right - left) / 2就不会溢出,由于left + (right - left) / 2 = left / 2 + right / 2 < right / 2 + right / 2 = right,因此也可以看出left + (right - left) / 2 不溢出。

  • 可使用位运算提高运算效率 int mid = left + ((right - left) >> 1)