Go/C語言LeetCode題解997找到小鎮(zhèn)法官
題目描述
997. 找到小鎮(zhèn)的法官 - 力扣(LeetCode)
小鎮(zhèn)里有 n 個(gè)人,按從 1 到 n 的順序編號(hào)。傳言稱,這些人中有一個(gè)暗地里是小鎮(zhèn)法官。
如果小鎮(zhèn)法官真的存在,那么:
- 小鎮(zhèn)法官不會(huì)信任任何人。
- 每個(gè)人(除了小鎮(zhèn)法官)都信任這位小鎮(zhèn)法官。
- 只有一個(gè)人同時(shí)滿足屬性 1 和屬性 2 。
給你一個(gè)數(shù)組 trust ,其中 trust[i] = [ai, bi] 表示編號(hào)為 ai 的人信任編號(hào)為 bi 的人。
如果小鎮(zhèn)法官存在并且可以確定他的身份,請返回該法官的編號(hào);否則,返回 -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
提示:
1 <= n <= 1000
0 <= trust.length <= 10^4
trust[i].length == 2[=
trust 中的所有trust[i] = [ai, bi] 互不相同
ai != bi
1 <= ai, bi <= n
思路分析
記錄每個(gè)人被信任的次數(shù)。 信任次數(shù)為n-1的人就是法官
同時(shí)如果這個(gè)人信任別過人就讓他的被信任次數(shù)-1 (這個(gè)操作主要是判斷一個(gè)人不是法官,如果一個(gè)人被其他人信任了n-1次,那么這個(gè)人可能是法官,如果這個(gè)人信任過別人,那么讓他的被信任次數(shù)-1,他的被信任次數(shù)為n-2!=n-1。這樣就滿足了法官不能信別人的邏輯,他也就不是法官。)
有人被信任的次數(shù)為n-1,那么他就是法官!沒有這樣的人,那么返回-1.
go 代碼
class Solution {
public static int findJudge(int n, int[][] trust) {
int[] times=new int[n+1];
for(int i=0;i<trust.length;i++){
times[trust[i][1]]++;
times[trust[i][0]]--;
}
for(int i=1;i<=n;i++){
if(times[i]==n-1) return i;
}
return -1;
}
}
C語言
暴力法
關(guān)鍵點(diǎn):
1:關(guān)鍵點(diǎn)兩個(gè),一個(gè)是相信的人數(shù),一個(gè)是不能相信人
2:用hashSet去記錄,如果相信別人,那么這個(gè)人的信用設(shè)置為負(fù)數(shù)。
3:被相信的人,hashSet信用值增加
時(shí)間復(fù)雜度:O(n)
空間復(fù)雜度:O(n)
代碼
int findJudge(int n, int** trust, int trustSize, int* trustColSize)
{
//根據(jù)入度進(jìn)行遍歷
int hashSet[n+1]; //相信這個(gè)i的人數(shù)
memset(hashSet,0, sizeof(hashSet));
for(int i = 0; i < trustSize; i++)
{
hashSet[trust[i][1]]++;
//相信別人 就不能是法官
hashSet[trust[i][0]] = INT_MIN;
}
for(int i = 1; i <= n; i++)
{
if(hashSet[i] == n-1 )
{
return i;
}
}
return -1;
}
參考
一題兩解:哈希表 & 優(yōu)化! - 找到小鎮(zhèn)的法官 - 力扣(LeetCode)
以上就是Go/C語言LeetCode題解997找到小鎮(zhèn)法官的詳細(xì)內(nèi)容,更多關(guān)于Go/C語言題解找到小鎮(zhèn)法官的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
GoLang的sync.WaitGroup與sync.Once簡單使用講解
sync.WaitGroup類型,它比通道更加適合實(shí)現(xiàn)這種一對多的goroutine協(xié)作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時(shí),與之前提到的同步工具一樣,它一旦被真正的使用就不能被復(fù)制了2023-01-01
Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項(xiàng)目實(shí)踐
本文主要介紹了Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
golang實(shí)現(xiàn)簡單的udp協(xié)議服務(wù)端與客戶端示例
這篇文章主要介紹了golang實(shí)現(xiàn)簡單的udp協(xié)議服務(wù)端與客戶端,結(jié)合實(shí)例形式分析了基于UDP協(xié)議的數(shù)據(jù)傳輸相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07
用Go+Redis實(shí)現(xiàn)分布式鎖的示例代碼
在分布式的業(yè)務(wù)中 , 如果有的共享資源需要安全的被訪問和處理 , 那就需要分布式鎖,本文主要介紹了用Go+Redis實(shí)現(xiàn)分布式鎖的示例代碼,感興趣的可以了解一下2021-12-12

