※ 引述《Rushia (みけねこ的鼻屎)》之铭言:
: 1512. Number of Good Pairs
: 给你一个整数阵列 nums,如果 nums[i] == nums[j] 且 i < j 则 (i, j) 是一个
: Pair,求出 nums 共有几个 Pair。
: 思路:
: 1.用一个 map 记录之前出现过的数字数量,因为 nums[i] 介于 0 到 100 所以用
: int[101]。
: 2.每一轮可以产生的 Pair 为累计先前出现过的数量,把每一轮的结果加总即可。
思路:
跟这个差不多
主要是每次出现新数字就会多N个组合所以逻辑是result+=count;
count+=1;
以及学到快速使用HashMap:
*nums_map.entry(num).or_insert(0) += 1;
.entry(num) : 寻找key(num)-value是存在
.or_insert(0) : key(num)-value存在
就会给你value的可变引用并进行后面操作(+=1)
key(num)-value不存在
则会用初始值(0)建立一对key(num)-value
并给你value的可变引用
再用这个可变引用做后面操作(+=1)
Code:
use std::collections::HashMap;
impl Solution {
pub fn num_identical_pairs(nums: Vec<i32>) -> i32 {
let mut nums_map = HashMap::new();
let mut result = 0;
for num in &nums {
match nums_map.get(num) {
Some(count) => {
result += count;
}
None => {}
}
*nums_map.entry(num).or_insert(0) += 1;
}
result
}
}