212 字
1 分钟
1512. 好数对的数目
Problem
给你一个整数数组 nums。
如果一组数字 (i, j) 满足 nums[i] == nums[j] 且 i < j,就认为这是一组 好数对。
返回好数对的数目。
https://leetcode.cn/problems/number-of-good-pairs/description/
示例 1:
输入:nums = [1,2,3,1,1,3] 输出:4 解释:有 4 组好数对:(0,3), (0,4), (3,4), (2,5)
示例 2:
输入:nums = [1,1,1,1] 输出:6 解释:数组中的每组数字都是好数对
约束:
1 <= nums.length <= 1001 <= nums[i] <= 100
思路
双重循环统计即可。也可以先用哈希表统计每个数字出现次数,每个数字贡献 c * (c-1) / 2 对。
from collections import Counter
class Solution: def numIdenticalPairs(self, nums: list[int]) -> int: count = Counter(nums) return sum(c * (c - 1) // 2 for c in count.values())import unittest
class TestNumIdenticalPairs(unittest.TestCase): def setUp(self): self.solution = Solution()
def test_example1(self): self.assertEqual(self.solution.numIdenticalPairs([1, 2, 3, 1, 1, 3]), 4)
def test_example2(self): self.assertEqual(self.solution.numIdenticalPairs([1, 1, 1, 1]), 6)
def test_no_pairs(self): self.assertEqual(self.solution.numIdenticalPairs([1, 2, 3]), 0)
def test_single(self): self.assertEqual(self.solution.numIdenticalPairs([1]), 0)
if __name__ == '__main__': unittest.main()