zoukankan      html  css  js  c++  java
  • [Swift]LeetCode997. 找到小镇的法官 | Find the Town Judge

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10429029.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    In a town, there are N people labelled from 1 to N.  There is a rumor that one of these people is secretly the town judge.

    If the town judge exists, then:

    1. The town judge trusts nobody.
    2. Everybody (except for the town judge) trusts the town judge.
    3. There is exactly one person that satisfies properties 1 and 2.

    You are given trust, an array of pairs trust[i] = [a, b] representing that the person labelled a trusts the person labelled b.

    If the town judge exists and can be identified, return the label of the town judge.  Otherwise, return -1.

    Example 1:

    Input: N = 2, trust = [[1,2]]
    Output: 2
    

    Example 2:

    Input: N = 3, trust = [[1,3],[2,3]]
    Output: 3
    

    Example 3:

    Input: N = 3, trust = [[1,3],[2,3],[3,1]]
    Output: -1
    

    Example 4:

    Input: N = 3, trust = [[1,2],[2,3]]
    Output: -1
    

    Example 5:

    Input: N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
    Output: 3

    Note:

    1. 1 <= N <= 1000
    2. trust.length <= 10000
    3. trust[i] are all different
    4. trust[i][0] != trust[i][1]
    5. 1 <= trust[i][0], trust[i][1] <= N

    在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。

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

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

    给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。

    如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -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
    

    示例 4:

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

    示例 5:

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

    提示:

    1. 1 <= N <= 1000
    2. trust.length <= 10000
    3. trust[i] 是完全不同的
    4. trust[i][0] != trust[i][1]
    5. 1 <= trust[i][0], trust[i][1] <= N

    776ms

     1 class Solution {    
     2     func findJudge(_ N: Int, _ trust: [[Int]]) -> Int {
     3        if( N == 1) {
     4         return N
     5     }
     6     if(trust.count == 0 || trust[0].count==0){
     7          return -1;
     8     }
     9     var vote = [Int](repeating: 0, count: N)
    10     for i in 0..<trust.count {
    11         var trustee = trust[i][0] //someone is a trustee
    12         var trusted = trust[i][1] // Trusted by someone
    13         vote[trustee - 1] =  vote[trustee - 1] - 1
    14         vote[trusted - 1] =  vote[trusted - 1] + 1
    15     }
    16     for i in 0..<N{
    17         if(vote[i] == N-1) {
    18             return i + 1
    19         }
    20     }
    21     return -1
    22   }
    23 }

    784ms

     1 class Solution {
     2     func findJudge(_ N: Int, _ trust: [[Int]]) -> Int {
     3         var arr = Array(repeating: 0, count: N + 1)
     4         for i in 0..<trust.count {
     5             arr[trust[i][1]] += 1
     6             arr[trust[i][0]] -= 1
     7         }
     8         for i in 1..<arr.count {
     9             if arr[i] == N - 1 {return i}
    10         }
    11         return -1
    12     }
    13 }

    788ms

     1 class Solution {
     2   func findJudge(_ N: Int, _ trust: [[Int]]) -> Int {
     3     var res = [Int].init(repeating: 0, count: N)
     4     var trusts = [Bool].init(repeating: false, count: N)
     5     for pair in trust { 
     6       res[pair[1] - 1] += 1
     7       trusts[pair[0] - 1] = true
     8     }
     9     
    10     for i in 0..<N {
    11       if res[i] == N - 1 && trusts[i] == false {
    12         return i + 1
    13       }
    14     }
    15     return -1
    16   }
    17 }

    800ms

     1 class Solution {
     2     func findJudge(_ N: Int, _ trust: [[Int]]) -> Int {
     3         var candDict: [Int: Int] = [:]
     4         for index in 1...N+1{
     5             candDict[index] = 0
     6         }
     7         for tru in trust{
     8             var t = tru[0]
     9             var r = tru[1]
    10             if let val = candDict[t]{
    11                 candDict[t] = nil
    12             }
    13             if let val = candDict[r]{
    14                 candDict[r]! += 1
    15             }
    16         }
    17         for (key,val) in candDict{
    18             if val == N-1{
    19                 return key
    20             }
    21         }
    22         return -1
    23     }
    24 }

    816ms

     1 class Solution {
     2     func findJudge(_ N: Int, _ trust: [[Int]]) -> Int {
     3         var inAndOut = [[Int]](repeating: [Int](repeating: 0, count: 2),count: N + 1)
     4         for t in trust {
     5             inAndOut[t[0]][0] += 1
     6             inAndOut[t[1]][1] += 1
     7         }
     8         
     9         for i in 1..<inAndOut.count {
    10             let item = inAndOut[i]
    11             if item[1] == N - 1 && item[0] == 0 {
    12                 return  i
    13             }
    14         }
    15         return -1
    16     }
    17 }
  • 相关阅读:
    Android ConstraintLayout详解
    Android开发屏幕适配解决方
    高并发场景下的一种JVM GC优化配置【CMS】
    Runnable 和 Callable的区别
    理解对象实例化顺序
    mysql 优化原理【转】
    使用@Scheduled注解编写spring定时任务
    Spring加载resource时classpath*:与classpath:的区别
    Java 8 中的 Streams API 详解
    java 8 函数式接口
  • 原文地址:https://www.cnblogs.com/strengthen/p/10429029.html
Copyright © 2011-2022 走看看