[英]Arrays.binarySearch() returns wrong insertion point
這是代碼:
public class Main {
public static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
int arr[] = {10,50,999,1000};
int index = Arrays.binarySearch(arr,55);
System.out.println(index);
}
}
這里的 output 是 '-3',如果 output 來自這個公式“(-(插入點) - 1)”,則意味着插入點是 '4',這是不對的。
那么我錯過了什么?
插入點是2
,而不是4
。
根據官方文檔:
插入點定義為將鍵插入數組的點:第一個元素的索引大於鍵 [...]
您的索引數組是
[10, 50, 999, 1000]
0 1 2 3
大於55
的第一個元素是索引2
處的999
。 請記住,索引從0
開始計數。
所以插入點是2
。 因此,使用公式(-(insertion point) - 1)
,返回值必須是:
(-(2) - 1) = -3
這正是你得到的。
沒有遺漏。 Array.binarySearchs
返回搜索鍵的索引,如果它包含在數組中; 否則,(-(插入點)- 1)。 插入點定義為將鍵插入數組的點:第一個元素的索引大於鍵,或者如果數組中的所有元素都小於指定的鍵,則為 a.length。 請注意,這保證了當且僅當找到鍵時,返回值將 >= 0。 這個描述來自這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.