LeetCode 1512. 好数对的数目

题目描述

1512. 好数对的数目

思路分析

解法一:哈希表计数(推荐)

核心思路

  • 好数对要求 nums[i] == nums[j] 且 i < j,即统计相同值的数对数
  • 遍历数组,用哈希表记录每个值已出现的次数
  • 当处理 nums[i] 时,之前已经出现了 cnt 次相同的值,则可以与当前元素组成 cnt 个好数对
  • 累加后将该值的计数 +1


复杂度分析

  • 时间复杂度:O(n),其中 n 为数组长度
  • 空间复杂度:O(n),哈希表最多存储 n 个不同元素
class Solution {
    public int numIdenticalPairs(int[] nums) {
        // 记录每个值出现的次数
        Map<Integer, Integer> count = new HashMap<>();
        int ans = 0;

        for (int num : nums) {
            // 当前值之前出现的次数即可组成的好数对数
            ans += count.getOrDefault(num, 0);

            // 更新计数
            count.merge(num, 1, Integer::sum);
        }

        return ans;
    }
}
func numIdenticalPairs(nums []int) int {
    // 记录每个值出现的次数
    count := make(map[int]int)
    ans := 0

    for _, num := range nums {
        // 当前值之前出现的次数即可组成的好数对数
        ans += count[num]

        // 更新计数
        count[num]++
    }

    return ans
}

相似题目

题目 难度 考察点
1. 两数之和 简单 哈希表
2006. 差的绝对值为 K 的数对数目 简单 哈希表、计数
2351. 第一个出现两次的字母 简单 哈希表
1748. 唯一元素的和 简单 哈希表、计数
2150. 找出数组中的所有孤独数字 中等 哈希表、计数
454. 四数相加 II 中等 哈希表
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/31181872
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!