文章目錄
- 題目及要求
- 題目決議
- 代碼實作
- 第一步:創建一個 容量為 n +1 的一維陣列(如果沒有:這句按照從1到n對n個人進行編號,我就直接new int[n] 了)
- 計票(遍歷題目所給的二維陣列來統計票數)
- 通過 遍歷 我們 的 計票陣列 poll ,來看看有沒有一個人獲取所有的票,
- 最后附上代碼
題目及要求

?
題目決議
先來分析 第一句話:“在一個小鎮里,按從 1 到 n 為 n 個人進行編號,傳言稱,這些人中有一個是小鎮上的秘密法官,”
注意到 我 加粗的字體了嘛?這些就是這句話關鍵點之一 !
在加上這句話 :陣列 trust,該陣列由信任對 trust[i] = [a, b] 組成,表示編號為 a 的人信任編號為 b 的人 》》 這句話我們可以看作是一個投票機制,每個人都想有選舉權, 也就是說也可以投給自己,(題目也沒有說不能投給自己!!)
現在由這兩個條資訊,我們此時就應該有一個想法,我能不能創建一個陣列,以下標為人的編號,以下標對應的元素值為下標對應編號人所獲得的票數,
至于 如何獲得每個人獲取的票數,需理解題目的那三個條件,
1.小鎮的法官不相信任何人,【意味著 法官只會給自己投票】
2.每個人(除了小鎮法官外)都信任小鎮的法官,【意味著法官將擁有所有人的票】
3.只有一個人同時滿足條件 1 和條件 2 【法官只有一個】
至于 最有一個條件:“如果小鎮存在秘密法官并且可以確定他的身份,請回傳該法官的編號,否則,回傳 -1,”
這很容易理解,找到就回傳他編號,沒找就回傳-1,剛好我們陣列下標最小都是0,所以 -1 也很適合作為沒找到法官的回傳值,
?
代碼實作
第一步:創建一個 容量為 n +1 的一維陣列(如果沒有:這句按照從1到n對n個人進行編號,我就直接new int[n] 了)

?
計票(遍歷題目所給的二維陣列來統計票數)
題目條件:二維陣列 trust,該陣列由信任對 trust[i] = [a, b] 組成,表示編號為 a 的人信任編號為 b 的人,
意思是: 編號a人 將自己的票投給 編號為 b 的 人(編號b 可以就是編號 a,就是自己給自己投票)
?
通過 遍歷 我們 的 計票陣列 poll ,來看看有沒有一個人獲取所有的票,
有個點需注意:我們的計票陣列,初始化為 0, 在投票的程序中,投出的時候,自減一、表示 該編號人的已投票,此時 投出自己的一票的人,他的票數為 -1,
而法官這貨,誰都不相信,所以這貨肯定 投給自己,那么在 經過 --(投票) 和 ++(獲票) 之后,等于他給自己投的票不作數 ,
所以 如果法官存在,并能確認他的身份時,他的獲得票子是n-1 張,他自己的那張票不算,從我們陣列 poll中看看有沒有元素為 n-1的,如果有,那么該元素所對應的下標就是法官的編號,(別忘了定義一個 整形變數,用來記錄法官的編號,并且初始化為 -1 ,畢竟法官也可能不在這一伙人里,題目也是這樣說:沒找到,就回傳-1)
?
最后附上代碼
class Solution {
public int findJudge(int n, int[][] trust) {
int[] poll = new int[n+1];// 該陣列每個元素都為0,剛好符合未開始投票的情況
for(int i = 0;i < trust.length;i++){
poll[trust[i][0]]--;// a 投票
poll[trust[i][1]]++;// b 獲得 a 的投票
}
int judge = -1;
for(int i = 1 ;i<poll.length;i++){
if(poll[i]==n-1){
judge = i;
break;
}
}
return judge;
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386565.html
標籤:java


