※ 引述《yam276 (史萊哲林的優等生)》之銘言:
: ※ 引述《Rushia (みけねこ的鼻屎)》之銘言:
: : https://leetcode.com/problems/find-players-with-zero-or-one-losses
: : 2225. Find Players With Zero or One Losses
: : 給你一個二維陣列matches[][],matches[i] = {wini, loseri} 表示第i場比賽
: : wini打贏了loseri,返回一個二維列表,第一個列表為沒輸過的玩家,第二個列表
: : 為只輸一場的玩家,列表中的id升序排列。
: : 思路:
: : 1.統計所有玩家的敗場數,把敗場為0和敗場為1的抓出來即可,可以用HashMap
: : 或是int[]計數並排除掉沒出現的id。
: 思路:
: 1. 先把題目給的陣列分成贏跟輸的HashMap
: 2. 尋找有在贏Map沒在輸Map的 = Never_loses
: 3. 尋找輸Map數字是1的 = 一敗仔
: 4. Sort 因為不是照順序
: Code:
: use std::collections::HashMap;
: impl Solution {
: pub fn find_winners(matches: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
: let mut wins = HashMap::new();
: let mut losses = HashMap::new();
: for cur_match in matches{
: let (winner, loser) = (cur_match[0],cur_match[1]);
: *wins.entry(winner).or_insert(0) += 1;
: *losses.entry(loser).or_insert(0) += 1;
: }
: let mut no_losses: Vec<i32> = wins.keys()
: .filter(|&player| !losses.contains_key(player))
: .cloned().collect();
: let mut one_loss: Vec<i32> = losses.iter()
: .filter(|&(_, loss_times)| *loss_times == 1)
: .map(|(&player, _)| player).collect();
: no_losses.sort_unstable();
: one_loss.sort_unstable();
: vec![no_losses, one_loss]
: }
: }
Python code:
class Solution:
def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
mc = {}
pm = {}
for e in matches:
if e[0] in mc:
mc[e[0]] +=1
else:
mc[e[0]] = 1
if e[1] in pm:
pm[e[1]] +=1
else:
pm[e[1]] = 1
no_losses = sorted([key for key in mc.keys() if key not in pm])
one_losses = sorted([key for key,value in pm.items() if value == 1])
return [no_losses,one_losses]
照抄大老思路
然後我不該亂取變數名稱
對不起