由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode 新题 Course Schedule用BFS怎么做?
相关主题
Course Schedule II DFS版minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?
word search BST 解法,大测试超时,请大家指点迷津问个BFS leetcode
看似很简单的一个BST问题但就是错了!两个Amazon面试题
DFS比BFS好在哪?问个最近面试里的题目
leetcode做伤心了问道面试题
leetcode number of islands为什么不能用BFS?Linkedin这道题用非递归该怎么写啊?
我又fail了面试a problem from leetcode: high efficiency algorithm for combinations problem
course schedule的代码实现一个 thread-safe blocking queue这题怎么写啊?L家的常考
相关话题的讨论汇总
话题: int话题: numcourses话题: boolean话题: visited
进入JobHunting版参与讨论
1 (共1页)
d******4
发帖数: 132
1
需要检测graph是否有cycle吧?leetcode将这题放到BFS里面, 用BFS怎么做?
r****7
发帖数: 2282
2
具体是啥?

【在 d******4 的大作中提到】
: 需要检测graph是否有cycle吧?leetcode将这题放到BFS里面, 用BFS怎么做?
w***y
发帖数: 6251
3
用BFS的话,是不是需要把visited edge都删掉?
s******x
发帖数: 417
4
使用queue
凡是indegree == 0的,入queue,然后找接下去的相连点,indegree减一。

【在 w***y 的大作中提到】
: 用BFS的话,是不是需要把visited edge都删掉?
a**x
发帖数: 14
5
class Solution {
public:
bool canFinish(int numCourses, vector>& prerequisites) {
// 0..n-1
vector vis(numCourses, false);
vector > mp(numCourses, vector());
vector ind(numCourses);
// init the map
for (int i = 0; i < prerequisites.size(); i++) {
int x = prerequisites[i][0];
int y = prerequisites[i][1];
mp[x].push_back(y);
ind[y]++;
}
queue que;
int tsort = 0;
for (int i = 0; i < numCourses; i++) {
if (ind[i] == 0) {
que.push(i);
tsort++;
}
}
while(!que.empty()) {
int n = que.front(); que.pop();
for (int i = 0; i < mp[n].size(); i++) {
ind[mp[n][i]]--;
if (ind[mp[n][i]] == 0) {
que.push(mp[n][i]);
tsort++;
}
}
}
return tsort == numCourses;
}
};
n**e
发帖数: 116
6
public class Solution {
private final Map> adj = new HashMap<>();
public boolean canFinish(int numCourses, int[][] prerequisites) {
for (int i = 0; i < prerequisites.length; ++i) {
int u = prerequisites[i][0], v = prerequisites[i][1];
addEdge(u, v);
}
boolean[] visited = new boolean[numCourses];
boolean[] recursionStack = new boolean[numCourses];
for (Integer v : adj.keySet()) {
if (hasCycle(v, visited, recursionStack)) return false;
}
return true;
}

private void addEdge(int u, int v) {
if (!adj.containsKey(u)) {
adj.put(u, new LinkedList<>());
}
adj.get(u).add(v);
if (!adj.containsKey(v)) {
adj.put(v, new LinkedList<>());
}
}

private boolean hasCycle(int v, boolean[] visited, boolean[]
recursionStack) {
if (!visited[v]) {
visited[v] = true;
recursionStack[v] = true;
for (Integer u : adj.get(v)) {
if (!visited[u] && hasCycle(u, visited, recursionStack))
return true;
else if (recursionStack[u]) return true;
}
}
recursionStack[v] = false;
return false;
}
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
实现一个 thread-safe blocking queue这题怎么写啊?L家的常考leetcode做伤心了
我恨iPhone@Facebook电面leetcode number of islands为什么不能用BFS?
攒人品,google电话面经我又fail了面试
弱问怎么判断两个binary tree相同?course schedule的代码
Course Schedule II DFS版minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?
word search BST 解法,大测试超时,请大家指点迷津问个BFS leetcode
看似很简单的一个BST问题但就是错了!两个Amazon面试题
DFS比BFS好在哪?问个最近面试里的题目
相关话题的讨论汇总
话题: int话题: numcourses话题: boolean话题: visited