题目地址:
https://leetcode.com/problems/minimum-number-of-vertices-to-reach-all-nodes/
给定一个有向无环图,其有 n n n个顶点,编号为 0 ∼ n − 1 0\sim n-1 0∼n−1。求一个最少的点集,使得每个点都能由这个点集中的某个点走到。题目保证答案唯一。
直接求没有入边的点即可(有入边的点只需要向前找,总能找到某个没有入边的点)。代码如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
List<Integer> res = new ArrayList<>();
// ind存某个顶点是否有入边
boolean[] ind = new boolean[n];
for (List<Integer> edge : edges) {
ind[edge.get(1)] = true;
}
for (int i = 0; i < n; i++) {
if (!ind[i]) {
res.add(i);
}
}
return res;
}
}
时间复杂度 O ( V + E ) O(V+E) O(V+E),空间 O ( V ) O(V) O(V)。