1

希望有人知道这个 Java 认证问题的答案:

public static void main(String[] args) {
 String[] sa = {"d", "c", "a", "b" };
 int x = Arrays.binarySearch(sa, "b");
 Arrays.sort(sa);
 int y = Arrays.binarySearch(sa, "b");
 System.out.println(x + " " + y);
}

哪两个结果是可能的?(选择两项。)
A)7 0
B)7 1
C)7 3
D)-1 0
E)-1 1
F)-1 3

唯一正确的答案是 E) -1 1,因为如果您使用二分搜索算法,这是唯一可能的输出。但是他们要我选择两个...所以第二个必须是 B) 7 1 然后,因为排序数组中的第二个 binarySearch 将始终返回1

所以我的问题是,为什么 B) 7 1 是可能的结果?更具体地说:未排序数组中的第一个 binarySearch 怎么可能返回 7?

提前致谢

4

2 回答 2

9

这是一个技巧问题。根据文档,对未排序数组的二进制搜索结果未定义:

在进行此调用之前,必须对数组进行排序(如上面的 sort 方法)。如果未排序,则结果未定义。

这尤其意味着任何数字,包括七,都是公平的游戏。

排序后的结果是明确定义的:你会得到一个1. 就像魔术一样,1答案列表中只有两对以结尾,所以BE是考官希望你做出的选择。

于 2012-06-16T06:23:31.727 回答
1

您可能应该坚持文档,而不是您对二进制搜索一般如何工作的了解。API 文档非常清楚地使用Array.binarySearch未排序的数组:“如果未排序,则结果未定义。”

换句话说,如果数组没有排序,结果不需要遵循任何规则。从二分查找的实现中你可能知道结果不能超过数组长度。但是,这是实现细节。你不能依赖它。

于 2012-06-16T06:30:17.890 回答