997. 找到小镇的法官【哈希表】

997. 找到小镇的法官

997. 找到小镇的法官

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

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

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

给你一个数组 trust ,其中 t r u s t [ i ] = [ a i , b i ] trust[i] = [a_i, b_i] trust[i]=[ai,bi] 表示编号为 a i a_i ai 的人信任编号为 b i b_i bi 的人。

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

示例 1:

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

示例 2:

输入:n = 3, trust = [[1,3],[2,3]]
输出:3
解释:12都信任3,但是3不信任任何人,所以3是法官

示例 3:

输入:n = 3, trust = [[1,3],[2,3],[3,1]]
输出:-1
解释:1,2,3都信任某个人,所以都不是法官,故没有法官

提示:

  • 1 < = n < = 1000 1 <= n <= 1000 1<=n<=1000
  • 0 < = t r u s t . l e n g t h < = 1 0 4 0 <= trust.length <= 10^4 0<=trust.length<=104
  • t r u s t [ i ] . l e n g t h = = 2 trust[i].length == 2 trust[i].length==2
  • t r u s t trust trust 中的所有 t r u s t [ i ] = [ a i , b i ] trust[i] = [a_i, b_i] trust[i]=[ai,bi] 互不相同
  • a i ! = b i a_i != b_i ai!=bi
  • 1 < = a i , b i < = n 1 <= a_i, b_i <= n 1<=ai,bi<=n

解题思路

  1. 找出被n-1个人信任的那个人,那个人可能是法官,因为他被其余所有人信任
  2. 这个人不信任其他任何人,则可确定确实是法官,否则不是法官

注意:只有一个人时,当前这个人就是法官,因为也符合不信任任何人

Go代码

func findJudge(n int, trust [][]int) int {
    // 找出被n-1个人信任的那个人,那个人可能是法官,因为被其余所有人信任
    // 这个人不信任其他任何人,则可确定确实是法官,否则不是法官
    // 只有一个人时,当前这个人就是法官,因为也符合不信任任何人
    if n== 1  {
        return 1
    }
    m := make(map[int]int) // 每个人有多少人信任
    for i := 0;i < len(trust);i++ {
        m[trust[i][1]]++
    }

    // 找出有n-1个人信任的人
    arr := make([]int,0)
    for k,v := range m {
        if v == n - 1 {
            arr = append(arr,k)
        }
    }
    // 题目表明法官只可能存在一个
    if len(arr) != 1 {
        return -1
    }

    // 法官不会信任其他任何人
    for i := 0;i < len(trust);i++ {
        if trust[i][0] == arr[0] {
            return -1
        }
    }

    return arr[0]
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值