LeetCode题解:5235. 找出输掉零场或一场比赛的玩家

题目

1、题目描述

给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。
返回一个长度为 2 的列表 answer :
  answer[0] 是所有 没有 输掉任何比赛的玩家列表。
  answer[1] 是所有恰好输掉 一场 比赛的玩家列表。
两个列表中的值都应该按 递增 顺序返回。
注意:
  只考虑那些参与 至少一场 比赛的玩家。
  生成的测试用例保证 不存在 两场比赛结果 相同 。

2、原题链接

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

解题报告

1、解题思路

在这里插入图片描述
  (1)使用哈希表存每位选手的状态。-1代表没有登场。0代表全赢。1代表只输了一场。大于1代表输了多于1场。
  (2)枚举每一场比赛,判断之前是否访登场。按照状态值存储对应数据。
  (3)枚举哈希表,找到所有参赛玩家。判断状态并将玩家填入对应数组中。
  (4)返回叠加好的数组。

2、解题方法

  哈希

2、代码详解

class Solution {
public:
    vector<vector<int>> findWinners(vector<vector<int>>& matches) {
        vector<vector<int>> ret;
        vector<int> winr;
        vector<int> losr;
        int user[100010];
        int matchesSize = matches.size();
        memset(user, -1, sizeof(user));
        ret.clear();
        for(int i = 0; i < matchesSize; ++i){
            int winer = matches[i][0];
            int loser = matches[i][1];
            if(user[winer] == -1){
                user[winer] = 0;
            }
            if(user[loser] == -1){
                user[loser] = 1;
            }else{
                user[loser]++;
            }
        }
        for(int i = 0; i < 100010; ++i){
            if(user[i] == -1) continue;
            if(user[i] == 0){
                winr.push_back(i);
            }else if(user[i] == 1){
                losr.push_back(i);
            }
        }
        ret.push_back(winr);
        ret.push_back(losr);
        return ret;
    }
};

总结

在这里插入图片描述

  数据量大用哈希基本都可以过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值