Java 从排序数组中交换哪个数字

Java 从排序数组中交换哪个数字,java,arrays,algorithm,binary-search,sorted,Java,Arrays,Algorithm,Binary Search,Sorted,我有一个排序整数数组。我们可以使用二进制搜索来查找元素。 现在,如果排序数组的一个元素与另一个元素交换。 查找交换元素的最佳方法是什么?查找此类元素的唯一方法似乎是常规线性搜索。您不能更快,因为您基本上不搜索特定元素,而是在违反某些属性时搜索位置(在本例中是排序)。由于您不知道任何可以帮助您跳过检查某些位置的内容,因此基本上需要检查所有位置。因此,这将是O(n)-正则线性搜索。如果你不知道这两个元素,并且交换没有“规则”,我不确定我是否完全理解这个问题。似乎您至少需要o(n)才能找到交换的元素。

我有一个排序整数数组。我们可以使用二进制搜索来查找元素。 现在,如果排序数组的一个元素与另一个元素交换。
查找交换元素的最佳方法是什么?

查找此类元素的唯一方法似乎是常规线性搜索。您不能更快,因为您基本上不搜索特定元素,而是在违反某些属性时搜索位置(在本例中是排序)。由于您不知道任何可以帮助您跳过检查某些位置的内容,因此基本上需要检查所有位置。因此,这将是O(n)-正则线性搜索。

如果你不知道这两个元素,并且交换没有“规则”,我不确定我是否完全理解这个问题。似乎您至少需要o(n)才能找到交换的元素。(通过一个简单的循环)


如果您确实知道一个元素(一对元素中的一个元素)并希望找到另一对元素。只需对你知道的一对进行二进制搜索,你就会在他的位置找到另一对。

你确实需要进行线性搜索,最坏情况下的时间是线性的。但最好的情况是logn


一旦找到第一个置换的元素,就知道了那个整数。因此,您可以进行二进制下降以找到它应该位于的位置。因此,基本上,如果两个不匹配中的一个在早期发生,您将节省时间

本质上,您可以进行二进制搜索,找到发送给您的错误路径遍历数组并比较相邻元素。@nem使用二进制搜索,您可能永远不会遇到放错位置的元素。或者你可能会遇到它,但看不到它放错了位置。我需要两个被切换的元素,从开始和结束位置开始遍历数组,分别向前和向后,直到找到顺序不正确的元素。这些是交换的元素。请记住,如果数组中有重复的元素,那么数组中可能没有明显的差异,并且不可能找到交换。