Skip to content

1512. Number of Good Pairs

Given an array of integers nums, return the number of good pairs**.

A pair (i, j) is called good if nums[i] == nums[j] and i < j.

Example 1:

Input: nums = [1,2,3,1,1,3]
Output: 4
Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed.

Example 2:

Input: nums = [1,1,1,1]
Output: 6
Explanation: Each pair in the array are good.

Example 3:

Input: nums = [1,2,3]
Output: 0

Constraints:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

Solution:

class Solution {
    public int numIdenticalPairs(int[] nums) {
        Map<Integer, List<Integer>> map = new HashMap<>();

        /*
         0  1  2 3. 4  5
        [1, 2, 3, 1, 1, 3]
        1, [3, 4
        2, [1
        3, [5 
        */

        for (int i = 0; i < nums.length; i++){
            if (!map.containsKey(nums[i])){
                map.put(nums[i], new ArrayList<Integer>());
            }else{
                map.get(nums[i]).add(i);
            }
        }

        int result = 0;
        for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()){
            result = result + (1 + entry.getValue().size())* entry.getValue().size()/2;
        };

        return result;
    }
}

// TC: O(n)
// SC: O(n)
class Solution {
    public int numIdenticalPairs(int[] nums) {
        int ans = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] == nums[j]) {
                    ans++;
                }
            }
        }

        return ans;
    }
}