C/C++哈希表優(yōu)化LeetCode題解997找到小鎮(zhèn)的法官
方法一、哈希表
今天這道題比較簡單,我們可以統(tǒng)計(jì)每個人信任別人的數(shù)量和被信任的數(shù)量,如果存在某個人信任別人的數(shù)量為0,且被信任的數(shù)量為 n-1,那么,這個人就是法官。
因?yàn)楸绢}的數(shù)據(jù)范圍為 [1,1000],數(shù)據(jù)范圍比較小,所以,直接使用數(shù)組作為哈希表來使用。
請看代碼:
class Solution {
public int findJudge(int n, int[][] trust) {
// 不信任任何人的人 & 被所有人信任的人
// 計(jì)算每個人信任的人的數(shù)量和被信任的數(shù)量
// 前者等于0,后者等于n-1
int[][] arr = new int[n + 1][2];
for (int[] t : trust) {
// 0表示信任別人
arr[t[0]][0]++;
// 1表示被別人信任
arr[t[1]][1]++;
}
for (int i = 1; i <= n; i++) {
if (arr[i][0] == 0 && arr[i][1] == n - 1) {
return i;
}
}
return -1;
}
}
- 時間復(fù)雜度:O(m),m 為 trust 數(shù)組的長度。
- 空間復(fù)雜度:O(n)。
運(yùn)行結(jié)果如下:

方法二、優(yōu)化
方法一中,我們使用了一個二維數(shù)組的第二維表示信任別人的數(shù)量和被別人信任的數(shù)量,其實(shí),我們也可以使用一個一維數(shù)組來求解, 減一表示信任別人的數(shù)量,加一表示被別人信任的數(shù)量,那么,只有法官才可能達(dá)到 n-1 的總數(shù)量。
請看代碼:
class Solution {
public int findJudge(int n, int[][] trust) {
// 不信任任何人的人 & 被所有人信任的人
int[] arr = new int[n + 1];
for (int[] t : trust) {
// 減一表示信任別人
arr[t[0]]--;
// 加一表示被別人信任
arr[t[1]]++;
}
for (int i = 1; i <= n; i++) {
// 因?yàn)楸粍e人信任不可能超過 n-1
// 所以,只有法官能達(dá)到 n-1
// 且法官信任別人數(shù)量為 0
// 所以,總的數(shù)量為 n-1
if (arr[i] == n - 1) {
return i;
}
}
return -1;
}
}- 時間復(fù)雜度:O(m),m 為 trust 數(shù)組的長度。
- 空間復(fù)雜度:O(n)。

以上就是C/C++哈希表優(yōu)化LeetCode題解997找到小鎮(zhèn)的法官的詳細(xì)內(nèi)容,更多關(guān)于C/C++哈希表優(yōu)化找到小鎮(zhèn)法官的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c++回溯法解決1到9之間插入加減或空使運(yùn)算結(jié)果為100
編寫一個在1,2,…,9(順序不能變)數(shù)字之間插入+或-或什么都不插入,使得計(jì)算結(jié)果總是100的程序,并輸出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 1002021-10-10
C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
詳解散列表算法與其相關(guān)的C語言實(shí)現(xiàn)
這篇文章主要介紹了詳解散列表算法與其相關(guān)的C語言實(shí)現(xiàn),平時經(jīng)常出現(xiàn)于各大考試競賽與程序員面試題目當(dāng)中,需要的朋友可以參考下2015-08-08
Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實(shí)例
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03

