【问题标题】:Java Arrays binarySearch() insertion pointJava 数组 binarySearch() 插入点
【发布时间】:2016-12-12 21:30:26
【问题描述】:
根据 Arrays.binarySearch(int[] a, int key) 的 Java 文档
返回:
搜索键的索引,如果它包含在数组中;
否则,(-(插入点)- 1)。插入点定义为
将键插入数组的点:索引
大于键的第一个元素的长度,如果所有元素都为 a.length
数组中的值小于指定的键。请注意,这
保证返回值将 >= 0 当且仅当键
找到了。
我需要了解为什么它返回(-(insertion point) - 1),为什么不只是-(insertion point)?
【问题讨论】:
标签:
java
arrays
binary-search
【解决方案1】:
因为如果它返回-(insertion point),并且插入点为0,那么你将无法区分我找到它,它在索引0处和我没有'没有找到它,你可以在索引 0 处插入。
【解决方案2】:
考虑一个数组:
int intArr[] = {5,12,20,30,55};
现在考虑这两个二分搜索语句:
System.out.println("The index of element 5 is : " + Arrays.binarySearch(intArr,5));
和
System.out.println("The index of element 4 is : " + Arrays.binarySearch(intArr,4));
输出
The index of element 5 is : 0
The index of element 4 is : -1
因为-1,我们可以区分这两个输出。如果没有-1,那么这两个语句都会给出相同的输出,即0。