当前位置: 首页 > 面试题库 >

Binarysearch未排序数组

韦胜泫
2023-03-14
问题内容

希望有人知道此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?

提前致谢


问题答案:

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

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

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

排序后的结果定义明确:您将获得1。就像被施了魔法一样,只有两对端1答案就行了,所以BE是考官希望你做出的选择。



 类似资料:
  • 问题内容: 如果binarySearch方法要求您先对数组进行排序,然后再将其作为参数传递给方法调用,那么为什么不对binarySearch方法进行排序呢? 问题答案: 二进制搜索的工作原理是假设数组的中间包含数组中的中值。如果未排序,则此假设就没有意义,因为中位数可以在任何地方,并且将数组减半可能意味着您削减了要搜索的数字。 二进制搜索不进行排序本身的原因是因为它不需要…该数组已排序。

  • 问题内容: 我可以帮忙吗?我已经尝试了许多方法来使它起作用,并对数组进行排序并打印,但是在此之后,我的二进制搜索功能就不想运行并给我正确的结果。它总是给我-1。有什么帮助吗? 问题答案: 您实际上并没有与数组值进行比较。在 而是使用本节 您找到索引是正确的,但是您所做的只是将索引号与密钥进行比较,这显然是不正确的。在编写时,您实际上将把您的密钥与index处的数字进行比较。 另外代码的最后一行给出

  • 求一个未排序数组的中值,我们可以对n个元素做O(nlogn)时间的min-heap,然后我们可以逐个抽取n/2个元素得到中值。但是这种方法需要O(nlogn)时间。 我们能在O(n)时间内通过某种方法做同样的事情吗?如果可以,那么请告诉或建议一些方法。

  • 问题内容: 这是一段C ++代码,显示了一些非常特殊的行为。由于某些奇怪的原因,奇迹般地对数据进行排序使代码快了将近六倍: 不使用std::sort(data, data + arraySize);,代码将在11.54秒内运行。 使用排序的数据,代码将在1.93秒内运行。 最初,我认为这可能只是语言或编译器异常,所以我尝试了Java: 具有类似但不太极端的结果。 我首先想到的是排序将数据带入缓存,

  • 我遇到了Java内置的collections.sort()方法的问题。我试图对一个名为TreeNode的自定义对象类型的ArrayList进行排序。我在过去成功地使用了这种方法,并希望外界看看我是否遗漏了任何明显的东西。 我希望通过一个整数字段对这些TreeNode对象进行排序,该字段都被称为myWeight。myWeight是特定字符在文本文件中出现的次数的整数表示。在我的项目中,我使用了一个名

  • 我正在尝试自己编程气泡排序、选择排序和插入排序。但是,我在插入排序方面遇到了麻烦。我会提供我的代码以及每行在做什么 好的,所以int count是找出排序数组的起始位置。然后我声明了index以查找将元素放在排序数组之后的位置,并为未排序数组的第一个元素声明了一个临时int,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让