547 Friend Circles

1. Question

There are N students in a class. Some of them are friends, while some are not. Their friendship is transitive in nature. For example, if A is a direct friend of B, and B is a direct friend of C, then A is an indirect friend of C. And we defined a friend circle is a group of students who are direct or indirect friends.

Given a N*N matrix M representing the friend relationship between students in the class. If M[i][j] = 1, then the ith and jth students are direct friends with each other, otherwise not. And you have to output the total number of friend circles among all the students.

Example 1:

Input:

[[1,1,0],
 [1,1,0],
 [0,0,1]]

Output: 2

Explanation:
The 0th and 1st students are direct friends, so they are in a friend circle. 

The 2nd student himself is in a friend circle. So return 2.

Example 2:

Note:

  1. N is in range [1,200].

  2. M[i][i] = 1 for all students.

  3. If M[i][j] = 1, then M[j][i] = 1.

2. Implementation

(1) DFS

(2) Union Find

3. Time & Space Complexity

DFS: 时间复杂度O(n^2), 空间复杂度O(n)

Union Find: 时间复杂度O(n^3), 遍历matrix需要O(n^2), 每call一次union()或者find()需要O(n)的时间,空间复杂度O(n)

Last updated

Was this helpful?