Find all pairs of integers within an array which sum to a specified value

前端 未结 15 2029
隐瞒了意图╮
隐瞒了意图╮ 2020-12-01 08:00

Design an algorithm to find all pairs of integers within an array which sum to a specified value.

I have tried this problem using a hash

15条回答
  •  悲&欢浪女
    2020-12-01 08:29

    A solution that takes into account duplicates and uses every number only one time:

    void printPairs(int[] numbers, int S) {
        // toMap(numbers) converts the numbers array to a map, where
        // Key is a number from the original array
        // Value is a count of occurrences of this number in the array
        Map numbersMap = toMap(numbers); 
    
        for (Entry entry : numbersMap.entrySet()) {
          if (entry.getValue().equals(0)) {
            continue;
          }
          int number = entry.getKey();
          int complement = S - number;
          if (numbersMap.containsKey(complement) && numbersMap.get(complement) > 0) {
          for (int j = 0; j < min(numbersMap.get(number), 
                                  numbersMap.get(complement)); j++) {
            if (number.equals(complement) && numbersMap.get(number) < 2) {
               break;
            }
            System.out.println(number, complement);
            numbersMap.put(number, numbersMap.get(number) - 1);
            numbersMap.put(complement, numbersMap.get(complement) - 1);
          }
        }
      }
    }
    

提交回复
热议问题