举两个例子:
l = 10, m = 2,石子距离分别为2 4 5 7 8
二分距离的时候,一开始left = 1,right = 10,之后每一步是这样的——
mid = (1 + 10) / 2 = 5,需要去掉2 4 7 8共4个,right = mid = 5
mid = (1 + 5) / 2 = 3,需要去掉2 5 8共3个,right = mid = 3
mid = (1 + 3) / 2 = 2,需要去掉5 8共2个,right = mid = 2(注意此时二分并未结束)
mid = (1 + 2) / 2 = 1,需要去掉0个,left = mid + 1 = 2,此时二分结束
这时候,left = 2是答案,不用特殊判断
把上面这组数据改一下——
l = 10, m = 2,石子距离分别为2 4 6 8
二分距离的时候,一开始left = 1,right = 10,之后每一步是这样的——
mid = (1 + 10) / 2 = 5,需要去掉2 4 8共4个,right = mid = 5
mid = (1 + 5) / 2 = 3,需要去掉2 6 8共3个,right = mid = 3(注意此时二分并未结束)
mid = (1 + 3) / 2 = 2,需要去掉0个(因为每个都刚好间隔2),left = mid + 1 = 3,二分结束
这时候,left = 3是答案吗?显然不是,最短距离为3的话,还是需要去掉至少3个石头才能达到目的
而最短距离为2的话,一个石头都不用去掉,所以这组数据并不存在刚好去掉2个石头就能满足的最短距离,这时候就需要这最后一步特殊判断了