为有牺牲多壮志,敢教日月换新天。

[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 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

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 }

 

posted @ 2019-02-25 08:34  为敢技术  阅读(332)  评论(0编辑  收藏  举报