LeetCode 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 | 中等 | 哈希表 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!