返回介绍

solution / 2200-2299 / 2225.Find Players With Zero or One Losses / README

发布于 2024-06-17 01:03:08 字数 5827 浏览 0 评论 0 收藏 0

2225. 找出输掉零场或一场比赛的玩家

English Version

题目描述

给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri

返回一个长度为 2 的列表_ _answer

  • answer[0] 是所有 没有 输掉任何比赛的玩家列表。
  • answer[1] 是所有恰好输掉 一场 比赛的玩家列表。

两个列表中的值都应该按 递增 顺序返回。

注意:

  • 只考虑那些参与 至少一场 比赛的玩家。
  • 生成的测试用例保证 不存在 两场比赛结果 相同

 

示例 1:

输入: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]]
解释:
玩家 1、2 和 10 都没有输掉任何比赛。
玩家 4、5、7 和 8 每个都输掉一场比赛。
玩家 3、6 和 9 每个都输掉两场比赛。
因此,answer[0] = [1,2,10] 和 answer[1] = [4,5,7,8] 。

示例 2:

输入:matches = [[2,3],[1,3],[5,4],[6,4]]
输出:[[1,2,5,6],[]]
解释:
玩家 1、2、5 和 6 都没有输掉任何比赛。
玩家 3 和 4 每个都输掉两场比赛。
因此,answer[0] = [1,2,5,6] 和 answer[1] = [] 。

 

提示:

  • 1 <= matches.length <= 105
  • matches[i].length == 2
  • 1 <= winneri, loseri <= 105
  • winneri != loseri
  • 所有 matches[i] 互不相同

解法

方法一:哈希表

class Solution:
  def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
    cnt = Counter()
    for a, b in matches:
      if a not in cnt:
        cnt[a] = 0
      cnt[b] += 1
    ans = [[], []]
    for u, v in cnt.items():
      if v < 2:
        ans[v].append(u)
    ans[0].sort()
    ans[1].sort()
    return ans
class Solution {
  public List<List<Integer>> findWinners(int[][] matches) {
    Map<Integer, Integer> cnt = new HashMap<>();
    for (int[] m : matches) {
      int a = m[0], b = m[1];
      cnt.putIfAbsent(a, 0);
      cnt.put(b, cnt.getOrDefault(b, 0) + 1);
    }
    List<List<Integer>> ans = new ArrayList<>();
    ans.add(new ArrayList<>());
    ans.add(new ArrayList<>());
    for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) {
      int u = entry.getKey();
      int v = entry.getValue();
      if (v < 2) {
        ans.get(v).add(u);
      }
    }
    Collections.sort(ans.get(0));
    Collections.sort(ans.get(1));
    return ans;
  }
}
class Solution {
public:
  vector<vector<int>> findWinners(vector<vector<int>>& matches) {
    unordered_map<int, int> cnt;
    for (auto& m : matches) {
      int a = m[0], b = m[1];
      if (!cnt.count(a)) cnt[a] = 0;
      ++cnt[b];
    }
    vector<vector<int>> ans(2);
    for (auto& [u, v] : cnt) {
      if (v < 2) ans[v].push_back(u);
    }
    sort(ans[0].begin(), ans[0].end());
    sort(ans[1].begin(), ans[1].end());
    return ans;
  }
};
func findWinners(matches [][]int) [][]int {
  cnt := map[int]int{}
  for _, m := range matches {
    a, b := m[0], m[1]
    if _, ok := cnt[a]; !ok {
      cnt[a] = 0
    }
    cnt[b]++
  }
  ans := make([][]int, 2)
  for u, v := range cnt {
    if v < 2 {
      ans[v] = append(ans[v], u)
    }
  }
  sort.Ints(ans[0])
  sort.Ints(ans[1])
  return ans
}
function findWinners(matches: number[][]): number[][] {
  const cnt: Map<number, number> = new Map();
  for (const [a, b] of matches) {
    cnt.set(a, cnt.has(a) ? cnt.get(a) : 0);
    cnt.set(b, (cnt.get(b) || 0) + 1);
  }
  const ans: number[][] = [[], []];
  for (let [u, v] of cnt.entries()) {
    if (v < 2) {
      ans[v].push(u);
    }
  }
  ans[0].sort((a, b) => a - b);
  ans[1].sort((a, b) => a - b);
  return ans;
}
/**
 * @param {number[][]} matches
 * @return {number[][]}
 */
var findWinners = function (matches) {
  const cnt = new Map();
  for (const [a, b] of matches) {
    cnt.set(a, cnt.has(a) ? cnt.get(a) : 0);
    cnt.set(b, (cnt.get(b) || 0) + 1);
  }
  const ans = [[], []];
  for (let [u, v] of cnt.entries()) {
    if (v < 2) {
      ans[v].push(u);
    }
  }
  ans[0].sort((a, b) => a - b);
  ans[1].sort((a, b) => a - b);
  return ans;
};

方法二

/**
 * @param {number[][]} matches
 * @return {number[][]}
 */
var findWinners = function (matches) {
  const onlyWins = new Set(),
    oneLose = new Set(),
    moreLosses = new Set();

  for (const [winner, loser] of matches) {
    if (!moreLosses.has(loser)) {
      if (oneLose.has(loser)) {
        oneLose.delete(loser);
        moreLosses.add(loser);
      } else {
        onlyWins.delete(loser);
        oneLose.add(loser);
      }
    }

    if (!moreLosses.has(winner) && !oneLose.has(winner)) {
      onlyWins.add(winner);
    }
  }

  return [[...onlyWins].sort((a, b) => a - b), [...oneLose].sort((a, b) => a - b)];
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文