希望有人知道这个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然后,因为排序数组中的第二个二进制搜索将始终返回1
。
所以我的问题是,为什么B)7 1可能的结果? 更具体:如何可能,未排序数组中的第一个二进制搜索返回7?
提前致谢
答案 0 :(得分:9)
这是一个棘手的问题。根据文档:
,未定义数组上的二进制搜索结果是未定义的在进行此调用之前,必须对数组进行排序(如上面的排序方法)。如果未排序,则结果未定义。
这尤其意味着包括七个在内的任何数字都是合理的游戏。
排序后的结果定义明确:您将获得1
。好像通过魔法一样,只有两对以答案列表中的1
结尾,因此B
和E
是审查员期望您做出的选择。
答案 1 :(得分:1)
您可能应该坚持使用文档,而不是您对二进制搜索一般如何工作的了解。关于在未排序的数组上使用Array.binarySearch
,API文档非常明确:“如果未排序,则结果未定义。”
换句话说,如果数组未排序,则不需要遵循任何规则的结果。从二进制搜索的实现中你可能知道结果不能超过数组长度。但是,这是实施细节。你不能依赖它。