Skip to content

Commit ca23974

Browse files
committed
update
1 parent a4ccd0a commit ca23974

File tree

1 file changed

+91
-19
lines changed

1 file changed

+91
-19
lines changed

leetcode_java/src/main/java/dev/workspace5.java

Lines changed: 91 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2733,52 +2733,124 @@ public boolean canFinish(int numCourses, int[][] prerequisites) {
27332733
return false;
27342734
}
27352735

2736-
private int[] topoSort(int numCourses, int[][] prerequisites){
2737-
int[] tSorting = new int[]{numCourses};
2736+
/**
2737+
* int[][] prerequisites: [1, 2], so 1 is 2's prerequisite
2738+
*
2739+
*/
2740+
private List<Integer> topoSort(int numCourses, int[][] prerequisites){
2741+
2742+
//int[] tSorting = new int[]{numCourses};
27382743

27392744
// init : 1) preList 2) degree
27402745
Map<Integer, List<Integer>> preList = new HashMap<>();
2741-
//Map<Integer, Integer> degree = new HashMap<>();
2742-
List<Integer> degree = new ArrayList<>();
2746+
List<Integer> degrees = new ArrayList<>();
2747+
List<Integer> res = new ArrayList<>();
27432748

2749+
// init all degree as 0
2750+
for (int i = 0; i < numCourses; i++){
2751+
degrees.add(i);
2752+
}
2753+
2754+
// init preList and update degrees
27442755
for (int[] x : prerequisites){
2745-
int pre = x[1];
2746-
int cur = x[0]; // ???
2756+
int pre = x[0];
2757+
int cur = x[1]; // ???
2758+
2759+
// update degrees
2760+
degrees.set(cur, degrees.get(cur)+1); // ???
2761+
// update PreList
27472762
if (!preList.containsKey(pre)){
27482763
preList.put(pre, new ArrayList<>());
27492764
}else{
27502765
List<Integer> curItems = preList.get(pre);
27512766
curItems.add(cur);
27522767
preList.put(pre, curItems);
2768+
//preList.put(pre, preList.get(pre).add(cur));
27532769
}
27542770
}
27552771

2756-
for (int[] x : prerequisites){
2757-
int pre = x[1];
2758-
int cur = x[0]; // ???
2759-
degree.set(cur, degree.get(cur)+1);
2760-
}
27612772

27622773
Queue<Integer> queue = new LinkedList();
2763-
queue.add(0);
2764-
int idx = 0;
2765-
tSorting[idx] = 0;
2774+
// add all node with degree=0 to queue
2775+
for (int j = 0; j < degrees.size(); j++){
2776+
if (degrees.get(j).equals(0)){
2777+
queue.add(j);
2778+
}
2779+
}
2780+
2781+
// int idx = 0;
2782+
// tSorting[idx] = 0;
27662783

27672784
while(!queue.isEmpty()){
27682785
Integer curNode = queue.poll();
2786+
// NOTE !!! add node poll from queue to final result
2787+
res.add(curNode);
2788+
27692789
for (Integer subNode : preList.get(curNode)){
2770-
if (degree.get(subNode).equals(0)){
2771-
idx += 1;
2772-
tSorting[idx] = subNode;
2773-
degree.set(subNode, degree.get(subNode)-1);
2790+
// if (degrees.get(subNode).equals(0)){
2791+
// idx += 1;
2792+
// tSorting[idx] = subNode;
2793+
// degrees.set(subNode, degrees.get(subNode)-1);
2794+
// }
2795+
2796+
//preList[subNode] -= 1;
2797+
degrees.set(subNode, degrees.get(subNode)-1);
2798+
if (degrees.get(subNode).equals(0)){
2799+
queue.add(subNode);
27742800
}
27752801
}
27762802
}
27772803

2778-
return tSorting;
2804+
return res;
27792805
}
27802806

27812807

2808+
// private int[] topoSort(int numCourses, int[][] prerequisites){
2809+
// int[] tSorting = new int[]{numCourses};
2810+
//
2811+
// // init : 1) preList 2) degree
2812+
// Map<Integer, List<Integer>> preList = new HashMap<>();
2813+
// //Map<Integer, Integer> degree = new HashMap<>();
2814+
// List<Integer> degree = new ArrayList<>();
2815+
//
2816+
// for (int[] x : prerequisites){
2817+
// int pre = x[1];
2818+
// int cur = x[0]; // ???
2819+
// if (!preList.containsKey(pre)){
2820+
// preList.put(pre, new ArrayList<>());
2821+
// }else{
2822+
// List<Integer> curItems = preList.get(pre);
2823+
// curItems.add(cur);
2824+
// preList.put(pre, curItems);
2825+
// }
2826+
// }
2827+
//
2828+
// for (int[] x : prerequisites){
2829+
// int pre = x[1];
2830+
// int cur = x[0]; // ???
2831+
// degree.set(cur, degree.get(cur)+1);
2832+
// }
2833+
//
2834+
// Queue<Integer> queue = new LinkedList();
2835+
// queue.add(0);
2836+
// int idx = 0;
2837+
// tSorting[idx] = 0;
2838+
//
2839+
// while(!queue.isEmpty()){
2840+
// Integer curNode = queue.poll();
2841+
// for (Integer subNode : preList.get(curNode)){
2842+
// if (degree.get(subNode).equals(0)){
2843+
// idx += 1;
2844+
// tSorting[idx] = subNode;
2845+
// degree.set(subNode, degree.get(subNode)-1);
2846+
// }
2847+
// }
2848+
// }
2849+
//
2850+
// return tSorting;
2851+
// }
2852+
2853+
27822854
}
27832855

27842856

0 commit comments

Comments
 (0)