我正在研究面试问题,发现这个问题真使我感到困惑。我知道如何执行基本的O(n ^ 2)解决方案,但HashTable O(n)毫无意义。
static void printpairs(int arr[],int sum)
{
HashSet<Integer> s = new HashSet<Integer>();
for (int i=0; i<arr.length; ++i)
{
int temp = sum-arr[i];
// checking for condition
if (temp>=0 && s.contains(temp))
{
System.out.println("Pair with given sum " +
sum + " is (" + arr[i] +
", "+temp+")");
}
s.add(arr[i]);
}
}
让我感到困惑的部分是它的检查条件。当没有任何内容放入哈希表时,它执行s.contains(temp)。那么如何包含和-我呢?
https://www.geeksforgeeks.org/given-an-array-a-and-a-number-x-check-for-pair-in-a-with-sum-as-x/
答案 0 :(得分:3)
首先,它是一个HashSet
,而不是哈希表。
第二,s.add(arr[i])
向HashSet
添加元素,因此s.contains(temp)
可能返回true
。
例如,假设您正在寻找一个总和为8的货币对。
1
,则在8-1
中找不到Set
,但您将1
添加到Set
。7
,则会在8-7
中找到Set
(因为您在1
中将Set
添加到了$this->response("test", REST_Controller::HTTP_OK);
之前的迭代)。