如果代码中提供的方法正确或缺少某些内容,我有一定的疑问。代码运行正常但我仍然认为该方法不适合。它似乎有一个bug。这是代码:
// Java program to find an element x in a
// sorted array using Exponential search.
import java.util.Arrays;
class Test
{
// Returns position of first ocurrence of
// x in array
static int exponentialSearch(int arr[], int n, int x)
{
// If x is present at firt location itself
if (arr[0] == x)
return 0;
// Find range for binary search by
// repeated doubling
int i = 1;
while (i < n && arr[i] <= x)
i = i*2;
// Call binary search for the found range.
return Arrays.binarySearch(arr, i/2, Math.min(i, n), x);
}
// Driver method
public static void main(String args[])
{
int arr[] = {2, 3, 4, 10, 40};
int x = 10;
int result = exponentialSearch(arr, arr.length, x);
System.out.println((result < 0) ? "Element is not present in array" :
"Element is present at index " + result);
}
}
这是返回类的方法。我错过了一些定义吗?
答案 0 :(得分:0)
您的difference()
方法基本上是逻辑正确的。它将创建一个新的OrdSetSimple
,其中s1中的元素不在s2中。
但是,请看下面的例子。
s1 = [2, 3, 5]
s2 = [3]
结果集
result = [2, 5]
您可以看到结果的大小为2,而s2的大小为1。
从代码中,将结果集的大小设置为s2的大小。
OrdSetSimple set = new OrdSetSimple(size2);
可能导致无法将所有结果元素添加到结果中。
尝试将代码更改为
OrdSetSimple set = new OrdSetSimple(size1);
使用s1的大小,因为结果集的大小应该等于或小于s1。