0%

LeetCode-785

LeetCode-785 判断二分图

题目

结果

代码

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
class Solution {
public boolean isBipartite(int[][] graph) {
// 是否标记过
Boolean[] flag = new Boolean[graph.length];
// 是否访问过
boolean[] visited = new boolean[graph.length];
// 从0开始遍历
int visiting = 0;
flag[0] = true;
// BFS所需
Queue<Integer> queue = new LinkedList<>();

// BFS
for (int i = 0; i < graph.length; i++) {
for (int j = 0; j < graph[visiting].length; j++) {
// 如果没被标记
if (flag[graph[visiting][j]] == null) {
flag[graph[visiting][j]] = !flag[visiting];
} else if (flag[graph[visiting][j]] == flag[visiting]) {
return false;
}


// 如果没遍历过
if (!visited[graph[visiting][j]] && !queue.contains(graph[visiting][j])) {
queue.add(graph[visiting][j]);
}
}
visited[visiting] = true;


if (!queue.isEmpty()) {
visiting = queue.poll();
} else {
// 如果队列为空
for (int j = 0; j < visited.length; j++) {
if (!visited[j]) {
visiting = j;
flag[visiting] = true;
break;
}
}
}
}
return true;
}
}

复杂度

时间复杂度:小于O(N²)

空间复杂度:O(N)