给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。
返回一个长度为 2 的列表 answer :
answer[0] 是所有 没有 输掉任何比赛的玩家列表。
answer[1] 是所有恰好输掉 一场 比赛的玩家列表。
两个列表中的值都应该按 递增 顺序返回。
注意:
只考虑那些参与 至少一场 比赛的玩家。
生成的测试用例保证 不存在 两场比赛结果 相同 。
https://leetcode.cn/problems/find-players-with-zero-or-one-losses/
- 哈希表排序:
.entrySet().stream()
- 比较器的三种形式:
Comparator.comparing 或 String.compareTo 或 Double.compare
- 有序哈希表:
LinkedHashMap
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*/
package com.huawei.prac;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Solution12th {
public static void main(String[] args) {
int[][] matches = {{1, 3}, {2, 3}, {3, 6}, {5, 6}, {5, 7}, {4, 5}, {4, 8}, {4, 9}, {10, 4}, {10, 9}};
// [[1,2,10],[4,5,7,8]]
List<List<Integer>> list = findWinners(matches);
System.out.println(list.get(0) + "\n" + list.get(1));
int[][] matches1 = {{2, 3}, {1, 3}, {5, 4}, {6, 4}};
// [[1,2,5,6],[]]
List<List<Integer>> list1 = findWinners(matches1);
System.out.println(list1.get(0) + "\n" + list1.get(1));
}
/**
* 2225. 找出输掉零场或一场比赛的玩家[哈希表 + 排序]
*
* @param matches 比赛输赢结果·二维数组
* @return 输掉零场或一场比赛的玩家
*/
public static List<List<Integer>> findWinners(int[][] matches) {
Map<Integer, Integer> loseCount = new HashMap<>();
for (int[] arr : matches) {
loseCount.merge(arr[1], 1, (oldV, newV) -> oldV + 1);
loseCount.putIfAbsent(arr[0], 0);
}
// 根据key增序排列
loseCount = loseCount.entrySet()
.stream()
.sorted(Comparator.comparingInt(Map.Entry::getKey))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (x, y) -> x, LinkedHashMap::new));
List<List<Integer>> resList = new ArrayList<>();
resList.add(new ArrayList<>());
resList.add(new ArrayList<>());
for (Map.Entry<Integer, Integer> entry : loseCount.entrySet()) {
if (entry.getValue() == 0) {
resList.get(0).add(entry.getKey());
}
if (entry.getValue() == 1) {
resList.get(1).add(entry.getKey());
}
}
return resList;
}
}