zoukankan      html  css  js  c++  java
  • 210-Course Schedule II

    【题目】

      你有n门课程需要完成,记为0到n-1。

          有些课程需要先完成预备课程,例如你在完成课程0前需要先完成课程1,记为对[0,1]。

        假如给定了课程总数以及所有预备关系对,返回完成所有课程的序列。

          可能有多个正确序列,你需要返回其中一种。如果不能完成所有课程,就返回空数组。

          举例:

          2 , [[1,0]]

      需要完成2门课程。 完成课程1前需要先完成课程0。所以正确的序列为[0,1]

          4 , [[1,0],[2,0],[3,1],[3,2]]

          有4门课程需要完成。完成课程3前需要先完成课程1和课程2,,完成课程1和课程2前都需要先完成课程0

          所以一个正确的序列为[0,1,2,3],另一个正确的序列为[0,2,1,3]。

    【分析】

          1 . 与Course Schedule的解题方式一样,只是在找入度为0的点是记录节点

    【算法实现】

    public class Solution {
        public int[] findOrder(int numCourses, int[][] prerequisites) {
            List<Set<Integer>> ls = new ArrayList<Set<Integer>>();
            for(int i=0; i<numCourses; i++) {
                ls.add(new HashSet<Integer>());
            }
            
            for(int i=0; i<prerequisites.length; i++) {
                ls.get(prerequisites[i][1]).add(prerequisites[i][0]);
            }
            
            int[] preNum = new int[numCourses];
            for(int i=0; i<numCourses; i++) {
                Iterator<Integer> it = ls.get(i).iterator();
                while(it.hasNext()) {
                    preNum[it.next()]++;
                }
            }
            
            int[] res = new int[numCourses];
            for(int i=0; i<numCourses; i++) {
                int j;
                for(j=0; j<numCourses; j++) {
                    if(preNum[j]==0) {
                        res[i]=j;
                        break;
                    }
                }
                if(j==numCourses)
                    return new int[0];
                preNum[j]=-1;
                
                Set<Integer> set = ls.get(j);
                Iterator<Integer> it = set.iterator();
                while(it.hasNext()) {
                    preNum[it.next()]--;
                }
            }
            return res;
        }
    }
  • 相关阅读:
    Ocelot简易教程(二)之快速开始2
    jQuery编程小结
    用户界面的一些好的设计理念
    JQuery插件开发教程
    ASP.NET MVC IOC 之AutoFac攻略
    ASP.NET MVC IOC 之Ninject攻略
    ASP.NET MVC IOC之Unity攻略
    ASP.NET MVC之单元测试分分钟的事
    C#秘密武器之扩展方法
    让AutoMapper在你的项目里飞一会儿
  • 原文地址:https://www.cnblogs.com/hwu2014/p/4519212.html
Copyright © 2011-2022 走看看