leetcode 210. Course Schedule II
来源:互联网 发布:淘宝直通车添加关键词 编辑:程序博客网 时间:2024/06/07 01:53
额今天这道题目。。。实际上是没做出来的
因为超时了
我算了下算法复杂度大概是O(n^2)
但是花了一个小时搞出来的。。实在是。。不舍得删了。。。留着自己看吧。。。
public class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { HashMap<Integer,LinkedList<Integer>> map=new HashMap<>(); for(int i=0;i<prerequisites.length;i++){ if(map.containsKey(prerequisites[i][0])){ LinkedList<Integer> list=map.get(prerequisites[i][0]); list.add(prerequisites[i][1]); map.put(prerequisites[i][0],list); }else{ LinkedList<Integer> list=new LinkedList<>(); list.add(prerequisites[i][1]); map.put(prerequisites[i][0],list); } } Set<Integer> set=new HashSet<>(); LinkedList<Integer> answear=new LinkedList<>(); LinkedList<Integer> table=new LinkedList<>(); for(int i=0;i<numCourses;i++){ if(!map.containsKey(i)){ answear.add(i); set.add(i); }else{ table.add(i); } } boolean mark2=false; int len=table.size(); while(table.size()!=0){ for(int i=0;i<table.size();i++){ LinkedList<Integer> temp=map.get(table.get(i)); boolean mark=true; for(int j=0;j<temp.size();j++){ if(!set.contains(temp.get(j))){ mark=false; break; } } if(mark){ answear.add(table.get(i)); set.add(table.get(i)); table.remove(i); i--; } } if(len>table.size()){ len=table.size(); }else{ mark2=true; break; } } if(mark2){ int[] nums2=new int[0]; return nums2; } int[] nums=new int[answear.size()]; for(int i=0;i<answear.size();i++){ nums[i]=answear.get(i); } return nums; }}额下面是标准答案之一,供学习
public class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { List<List<Integer>> adj = new ArrayList<>(numCourses); for (int i = 0; i < numCourses; i++) adj.add(i, new ArrayList<>()); for (int i = 0; i < prerequisites.length; i++) adj.get(prerequisites[i][1]).add(prerequisites[i][0]); boolean[] visited = new boolean[numCourses]; Stack<Integer> stack = new Stack<>(); for (int i = 0; i < numCourses; i++) { if (!topologicalSort(adj, i, stack, visited, new boolean[numCourses])) return new int[0]; } int i = 0; int[] result = new int[numCourses]; while (!stack.isEmpty()) { result[i++] = stack.pop(); } return result; } private boolean topologicalSort(List<List<Integer>> adj, int v, Stack<Integer> stack, boolean[] visited, boolean[] isLoop) { if (visited[v]) return true; if (isLoop[v]) return false; isLoop[v] = true; for (Integer u : adj.get(v)) { if (!topologicalSort(adj, u, stack, visited, isLoop)) return false; } visited[v] = true; stack.push(v); return true; }}
0 0
- [leetcode] 210.Course Schedule II
- Leetcode 210. Course Schedule II
- 210. Course Schedule II LeetCode
- leetcode 210. Course Schedule II
- LeetCode *** 210. Course Schedule II
- leetcode.210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- Leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- Leetcode 210. Course Schedule II
- [LeetCode]210. Course Schedule II
- leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- [leetcode]210. Course Schedule II
- leetcode 210. Course Schedule II
- Android中自定义ViewGroup使每行组件数量不确定,并拿到选中数据
- ogg rep进程 reperror
- 【Java集合的详细研究8】List,Set,Map用法以及区别
- Tensorflow lstm实现的小说撰写预测
- 一只大二狗的Android历程--国际化(作业)
- leetcode 210. Course Schedule II
- __ Uiautomator通过CTSHelper类查看报告
- Activity继承BaseActivity的使用(有相同不状态栏时很适用)
- css控制强制换行
- select2用法总结
- java工程师需要学习什么
- 服务器集群和反向代理
- 如何创建属于你自己的域名邮箱
- Java动态代理的两种实现方法