Leetcode 997. 找到小镇的法官(终于解决)
Published on 2022-05-21 15:08 in 暂未分类 with 萧海~

Leetcode 997. 找到小镇的法官(终于解决)

    在这里插入图片描述

    小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。

    如果小镇法官真的存在,那么:

    1. 小镇法官不会信任任何人。
    2. 每个人(除了小镇法官)都信任这位小镇法官。
    3. 只有一个人同时满足属性 1 和属性 2 。

    给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。

    如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。

    示例 1:

    输入:n = 2, trust = [[1,2]]
    输出:2

    示例 2:

    输入:n = 3, trust = [[1,3],[2,3]]
    输出:3

    示例 3:

    输入:n = 3, trust = [[1,3],[2,3],[3,1]]
    输出:-1

    提示:

    • 1 <= n <= 1000
    • 0 <= trust.length <= 10^4
    • trust[i].length == 2
    • trust 中的所有trust[i] = [ai, bi] 互不相同
    • ai != bi
    • 1 <= ai, bi <= n

    主要思路:
    巧妙利用结构体存储当前数的左边和右边出现次数

    Code:

    class Solution {
    public:
    int findJudge(int n, vector<vector<int>>& trust) {
    typedef struct
    {
    int left;
    int right;
    }pos;
    map<int,pos>mymap;
    for(int k=1;k<=n;k++)
    {
    int l1=0;
    int r1=0;
    for(int i=0;i<trust.size();i++)
    {
    if(trust[i][0]==k)
    {
    l1++;
    }
    if(trust[i][1]==k)
    {
    r1++;
    }
    }
    pos p1;
    p1.left=l1;
    p1.right=r1;
    mymap.insert(pair<int,pos>(k,p1));
    }
    map<int,pos>::iterator it;
    for(it=mymap.begin();it!=mymap.end();++it)
    {
    if(it->second.left==0&&(it->second.right>=(n-1)))
    return it->first;
    // cout<<it->first<<" "<<it->second.left<<" "<<it->second.right<<endl;
    }
    return -1;
    }
    };
    posted @   萧海~  阅读(33)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
    · Manus爆火,是硬核还是营销?
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    点击右上角即可分享
    微信分享提示
    电磁波切换