Town Hakim Leetcode həllini tapın

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon
alqoritmlər kodlaşdırma Qrafik müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 42

Problem bəyanat

Bu problemdə bizə 1-dən n-ə kimi n etiketli insanlar verilir. Bizə də 2d verilir array etibar [] [] göstərir ki, güvən [i] [0] -ci insanlar hər 1 <= i <etibarlılıq boyu üçün etibarlı [i] [0] nəfərlərə etibar edir.
Başqa heç kimə güvənməyən və bütün digər insanlar ona etibar edən bir adamı "şəhər hakimi" tapmalıyıq. Əgər belə bir şəxs yoxdursa, qayıdın -1 başqa şəhər hakimini qaytarın.

misal

#1

N = 2, trust = [[1,2]]
2

#2

N = 3, trust = [[1,3],[2,3],[3,1]]
-1

#3

N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
3

Yanaşma

Verilən ssenarini, a-dan b-yə bir kənarın, b-yə etibar etdiyini göstərən istiqamətləndirilmiş bir qrafika kimi nəzərdən keçirək.
Bir şəhər hakiminin heç kimə güvənməməsi, şəhər hakiminin gedən tərəfi yoxdur. Bütün digər 1 nəfərlik şəxs şəhər hakiminə etibar edir, bütün digər şəxslərdən şəhər hakiminə doğru cəmi 1 nəfərlik giriş.
Gələn kənarların sayı ilə çıxan kənarların arasındakı fərqin yalnız şəhər hakimi üçün n-1 olduğunu daha da başa düşə bilərik.
Sadə bir insan haqqında danışsaq, o mütləq şəhər hakiminə etibar edəcəkdir min (gedən kənar) = 1 və ən yaxşı halda bütün digər insanlar ona etibar etsələr də (əlbəttə şəhər hakimləri ona etibar etməyəcəklər) beləliklə maks (gələn kənar) = n-2.
Bu şəxs üçün gələn və çıxan kənarlar arasındakı maksimum fərq n-2- (1) = n-3-dür.
Həm də bir şəhər hakimi yoxdursa, heç kim gələn və gedən kənarların sayı arasındakı n-1 fərqini əldə edə bilməz.

İndi əsas vəzifəmiz fərqi hesablamaqdır, yəni hər bir şəxs üçün gələn kənarların sayını - çıxan kənarların sayını. Bunu etimad sıra sətirinə görə keçəcəyik.
Hər hansı bir sırada iki element var. Sol element kimə güvənirsə, sağ element sol elementin kimə güvənir.
Beləliklə, sol element sağa gedən kənara malikdir. Beləliklə, sol element üçün fərq dəyəri 1 azalacaq və sağ element üçün 1 artacaq.
Kodumuzda bu tapşırıq üçün netTrustGains dizisini istifadə etdik. Bu massivin hər bir i indeksi, şəxs üçün fərq dəyərini göstərir.

Etibar dizisini keçdikdən sonra a loop 1-dən n-dək hər bir insan üçün və hər hansı bir şəxsin = n-1 fərq dəyərinə sahib olub olmadığını yoxlayın.
Əgər belə bir insan tapılsa, onu geri qaytaracağıq, qayıdırıq -1.

Town Hakim Leetcode həllini tapınPin

Həyata keçirilməsi

Town Hakim Leetcode Çözümünü Tapmaq üçün C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int findJudge(int n, vector<vector<int>>& trust) 
{
    int netTrustGains[n+1];
    memset(netTrustGains, 0, sizeof(netTrustGains));
    for(vector<int>i:trust){
        netTrustGains[i[0]]--;
        netTrustGains[i[1]]++;

    }
    int judge=-1;
    for(int i=1;i<=n;i++){
        if(netTrustGains[i]==n-1){
            judge=i;
        }
    }
    return judge;
}
int main()
{
    int n=3;
    vector<vector<int>>trust
    {
        {1, 3},
        {2, 3}
    };
    cout << findJudge(3,trust);
}
3

Town Judge Leetcode Solution tap üçün Java Proqramı

import java.util.*;
import java.lang.*;

class Solution
{  
    public static void main(String args[])
    {
        int n = 3;
        int[][]trust = {{1,3},{2,3}};
        System.out.println(findJudge(n,trust));
    }
    public static int findJudge(int n, int[][] trust) 
    {
        int[]netTrustGains=new int[n+1];
        for(int[]i:trust){
            netTrustGains[i[0]]--;
            netTrustGains[i[1]]++;
            
        }
        int judge=-1;
        for(int i=1;i<=n;i++){
            if(netTrustGains[i]==n-1){
                judge=i;
            }
        }
        return judge;
    }
}
3

Town Hakim Leetcode Həllini Tapmaq üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (max (n, trust.size ())): Etibarlı döngəni xətti keçdik və başqa bir döngə hər kəs üçün 1-dən n-ə qədər netTrustGains-i yoxlamaq üçün n ölçüsündədir.

Kosmik Mürəkkəblik 

O (n): Biz n + 1 ölçülü bir netTrustGains massivi yaratdıq, beləliklə O (n) məkan mürəkkəbliyi.

Şərh yaz

Translate »
2