[Swift]LeetCode997. 找到小鎮的法官 | Find the Town Judge

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-ebbvzqqw-md.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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.git

If the town judge exists, then:github

  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:ide

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

Example 2:spa

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

Example 3:code

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

Example 4:htm

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

Example 5:blog

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 }
相關文章
相關標籤/搜索