首页 文章

Java Arrays binarySearch()插入点

提问于
浏览
4

根据Armans.binarySearch的Java doc(int [] a,int key)

返回:搜索键的索引(如果它包含在数组中);否则,( - (插入点) - 1) . 插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length . 请注意,当且仅当找到密钥时,这才能保证返回值> = 0 .

我需要理解为什么它会返回 (-(insertion point) - 1) ,为什么不只是 -(insertion point)

2 回答

  • 3

    因为如果它返回 -(insertion point) ,并且插入点为0,那么你将无法区分我发现它,它在索引0处,而我还没有找到它,你可以在索引0处插入 .

  • 15

    考虑一个数组:

    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));
    

    Output

    The index of element 5 is : 0
    The index of element 4 is : -1
    

    因为 -1 ,我们可以区分两个输出 . 如果没有 -1 ,那么这两个语句都会给出相同的输出,即 0 .

相关问题