【发布时间】:2019-09-12 16:49:06
【问题描述】:
说说Arrays中定义的这个方法:
public static int binarySearch(int[] a, int key)
如果在数组中找不到匹配项,我无法理解为什么返回 (-(insertion point) - 1) 而不是 -(insertion point)。
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int[],%20int)
这可能是Math.abs((-(insertion point) - 1)) 等于数组大小的原因吗?
如果你想知道我为什么要问这个,我发现要找到插入点,我基本上必须做减法。
int returnedVal = Arrays.binarySearch(arr, needle);
if (returnedVal < 0)
insertionPoint = Math.abs(returnedVal) - 1;
【问题讨论】:
-
如果您认为减法过于冗长且容易出错(很容易将顺序倒退),您可以执行
insertionPoint = ~returnedVal(请参阅我的回答中的编辑)
标签: java arrays binary-search