FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
algorithm/Week_03/id_16/LeetCode_997_16.java at master · feixiangcode/algorithm · GitHub
feixiangcode
/
algorithm
Public
forked from
algorithm001/algorithm
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
algorithm
/
Week_03
/
id_16
/
LeetCode_997_16.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
65 lines (56 loc) · 1.95 KB
Breadcrumbs
algorithm
/
Week_03
/
id_16
/
LeetCode_997_16.java
Copy path
File metadata and controls
65 lines (56 loc) · 1.95 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**[图][简单]
在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
如果小镇的法官真的存在,那么:
小镇的法官不相信任何人。
每个人(除了小镇法官外)都信任小镇的法官。
只有一个人同时满足属性 1 和属性 2 。
给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。
如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -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
示例 4:
输入:N = 3, trust = [[1,2],[2,3]]
输出:-1
示例 5:
输入:N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
输出:3
提示:
1 <= N <= 1000
trust.length <= 10000
trust[i] 是完全不同的
trust[i][0] != trust[i][1]
1 <= trust[i][0], trust[i][1] <= N
*/
/*
思路1:
每个人看成图的一个顶点,组成有向图,出度是信任别人的人数,入度是被人信任的人数。
由题可知,法官的出度是0,入度是N-1
总结:本题只需要关注每个顶点的出入度即可,不要关注各顶点之间的关系。
*/
class
Solution
{
public
int
findJudge
(
int
N
,
int
[][]
trust
) {
//1.得到每个人的出度和入度
int
[][]
people
=
new
int
[
N
][
2
];
//int数组默认值为0
int
in
,
out
;
for
(
int
[]
person
:
trust
){
out
=
person
[
0
];
in
=
person
[
1
];
people
[
out
-
1
][
0
]++;
//出度+1
people
[
in
-
1
][
1
]++;
//入度+1
}
//2.找到出度为0,入度为N-1的人
for
(
int
i
=
0
;
i
<
N
;
i
++){
if
(
people
[
i
][
0
] ==
0
&&
people
[
i
][
1
] ==
N
-
1
){
//符合条件的人必然不多于1个
return
i
+
1
;
}
}
return
-
1
;
}
}
Back
|
FazBrowse Home
|
New Git URL