与此HashMap算法面试问题混淆

时间:2019-01-20 09:14:22

标签: java algorithm hashmap hashtable

我正在研究面试问题,发现这个问题真使我感到困惑。我知道如何执行基本的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/

1 个答案:

答案 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); 之前的迭代)。