1.17 704. 二分查找
int middle = left + ((right - left) / 2);
如果left
和right
都是非常大的正整数,它们的和可能会超过整数类型(如int
)可以表示的最大值,导致溢出。 这种溢出会导致计算出的middle
值是错误的,从而可能导致数组越界或者错误的查找结果。
而使用left + ((right - left) / 2)
这种方式,right - left
的结果不会超过int
的最大值(假设left
和right
是有效的数组索引),因此加上left
之后也不会溢出。这样就保证了即使在left
和right
都很大的情况下,计算出的middle
值也是正确的。