Skip to content

Latest commit

 

History

History
150 lines (90 loc) · 2.37 KB

File metadata and controls

150 lines (90 loc) · 2.37 KB

中文文档

Description

Given an array of integers nums.

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

Return the number of good pairs.

 

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

Solutions

Python3

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        counter = collections.Counter(nums)
        return sum([x * (x - 1) for x in counter.values()]) >> 1

Java

class Solution {
    public int numIdenticalPairs(int[] nums) {
        Map<Integer, Integer> counter = new HashMap<>();
        for (int num : nums) {
            counter.put(num, counter.getOrDefault(num, 0) + 1);
        }
        int res = 0;
        for (int n : counter.values()) {
            res += n * (n - 1);
        }
        return res >> 1;
    }
}

C++

class Solution {
public:
    int numIdenticalPairs(vector<int>& nums) {
        unordered_map <int, int> counter;
        for (int num : nums) {
            ++counter[num];
        }
        int res = 0;
        for (auto &[num, n] : counter) {
            res += n * (n - 1);
        }
        return res >> 1;
    }
};

Go

func numIdenticalPairs(nums []int) int {
	counter := make(map[int]int)
	for _, num := range nums {
		counter[num]++
	}
	res := 0
	for _, n := range counter {
		res += n * (n - 1)
	}
	return res >> 1
}

...