根据Armans.binarySearch的Java doc(int [] a,int key)
返回:搜索键的索引(如果它包含在数组中);否则,( - (插入点) - 1) . 插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length . 请注意,当且仅当找到密钥时,这才能保证返回值> = 0 .
我需要理解为什么它会返回 (-(insertion point) - 1)
,为什么不只是 -(insertion point)
?
2 回答
因为如果它返回
-(insertion point)
,并且插入点为0,那么你将无法区分我发现它,它在索引0处,而我还没有找到它,你可以在索引0处插入 .考虑一个数组:
现在考虑这两个二进制搜索语句:
和
Output
因为
-1
,我们可以区分两个输出 . 如果没有-1
,那么这两个语句都会给出相同的输出,即0
.