Re: [閒聊] 每日LeetCode

作者: yam276 ('_')   2023-10-03 23:31:56
※ 引述《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
}
}
作者: AyuniD (アユニ.D)   2023-10-03 23:51:00
Rust 大師

Links booklink

Contact Us: admin [ a t ] ucptt.com