LeetCode:1557. 可以到达所有点的最少点数目
找到最小的点集使得从这些点出发能到达图中所有点,我们可以发现,入度为0的点,必然在答案当中,因为没有点能够到达该点,所以必须将其放入答案中。
但是这些点就能满足所有要求吗?即一个入度不为0的点一定能由一个入度为0的点遍历到?
- 若不考虑单独成环的情况(0→1→2→0),一定是这样的
- 因为任何一个点沿着箭头的反方向按bfs的方式走 且环只走一次一定能走到尽头,这个尽头一定是入度为0的点,不能再往下走了
题目中说,保证解存在且唯一,如果有单独成环的情况,解是不唯一的,因为0→1→2→0
中的每一个结点都能到达环中的所有点。所以题目中不存在单独成环的情况。
因此我们只需要找出入度为0的点即可。
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
class Solution {
public:
vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) {
vector<int> inDegrees(n, 0);
vector<int> ans;
for(auto & edge : edges){
inDegrees[edge[1]] ++;
}
for(int i = 0; i < n; ++ i){
if(inDegrees[i] == 0)
ans.emplace_back(i);
}
return ans;
}
};