Leetcode0997.町の裁判官を探す(簡単)

1.問題の説明

町 には、から まで の番号が付けられn た個人がい  ます。噂によると、これらの男性の1人は密かに小さな町の裁判官です。1n

町の裁判官が実際に存在する場合、次のようになります。

  1. 町の裁判官は誰も信用していません。
  2. 誰もが(町の裁判官を除いて)町の裁判官を信頼しました。
  3. プロパティ1 とプロパティ 2の両方を満たすのは1人だけ  です。

 個人IDが個人IDを信頼 trust して trust[i] = [ai, bi] いることを 示す配列が与えられます  。aibi

町の裁判官が存在し、識別できる場合は、その裁判官の番号を返します。それ以外の場合は、を返し -1 ます。

例1:

入力: n = 2、信頼= [[1,2]]
出力: 2

例2:

入力: n = 3、信頼= [[1,3]、[2,3]]
出力: 3

例3:

入力: n = 3、信頼= [[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

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/find-the-town-judge
著作権はLeetCode.comに帰属します。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2.問題解決分析

        ジャッジが1人の場合は、次の条件を満たす必要があります。

(1)他のすべての人は裁判官を信頼しているので、それぞれが少なくとも1回は信頼の最初の要素に現れます[i]

(2)信頼度がn-1の人は1人だけで、この人が裁判官であり、信頼の最初の要素の位置には表示されません[i]。

       ハッシュテーブルtrust_degree(python dict)は個人の信頼度を管理するために使用され、別のハッシュテーブルnon_judge(python set)は非裁判官のリストを管理するために使用されます。

        信頼をトラバースします。信頼ごとに[i]=[ai、bi]:

  • non_judgeにaiを追加し、trust_degreeにある場合はaiを削除します
  • biがnon_judgeにない場合:
    • biがtrust_degreeにある場合は、その値を1ずつ増やします。
    • biがtrust_degreeにない場合は、それを追加して値を1として記録します。

        町には一人しかいないというのが無視しやすい状況ですが、現時点では、質問の条件により、aiとbiが等しくてはいけないので、信頼は空でなければなりません。事件は裁判官です。

3.コードの実装

import time
from typing import List
from collections import deque

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        trust_deg = dict()
        non_judge = set()
        
        for [ai,bi] in trust:
            non_judge.add(ai)
            if ai in trust_deg:
                trust_deg.pop(ai)
            
            if bi not in non_judge:
                if bi in trust_deg:
                    trust_deg[bi] = trust_deg[bi] + 1
                else:
                    trust_deg[bi] = 1
        
        if len(trust_deg)==1:
            a = trust_deg.popitem()
            if a[1] == n - 1:
                return a[0]
        return -1
    
if __name__ == "__main__":
    
    sln = Solution()
    
    n = 2
    trust = [[1,2]]
    print(sln.findJudge(n, trust))
    
    n = 3
    trust = [[1,3],[2,3]]
    print(sln.findJudge(n, trust))
    
    n = 3
    trust = [[1,3],[2,3],[3,1]]
    print(sln.findJudge(n, trust))
            

        実行時間:76ミリ秒、すべてのPython3コミットでユーザーの97.45%を上回った

        メモリ消費量:18.2 MB、すべてのPython3コミットでユーザーの46.34%を上回っています

        メインディレクトリに戻る:Leetcodeの毎日の問題解決ディレクトリ(動的更新...) 

おすすめ

転載: blog.csdn.net/chenxy_bwave/article/details/124288664