IncredibleThings

导航

Microsoft - Get Course Order

 

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
        int[][] info = new int[4][];
        info[0] = null;
        info[1] = new int[] {0};
        info[2] = new int[] {1};
        info[3] = new int[] {1,0};
        int[] res = getCourseOrder(info, 3);
        for (int i = 0; i<res.length; i++){
            System.out.println(res[i]);
        }
        
    }
    
    
    public static int[] getCourseOrder(int[][]courseInfo, int courseToTake){
        List<Integer> list = new ArrayList<>();
        
        Queue<Integer> queue = new LinkedList<>();
        Set<Integer> set = new HashSet<>();
        queue.add(courseToTake);
        while(!queue.isEmpty()){
            int course = queue.poll();
            list.add(course);
            int[] preCourses = courseInfo[course];
            if(preCourses != null && preCourses.length>0){
                for(int i = 0; i < preCourses.length; i++){
                    if(!set.contains(preCourses[i])){
                        queue.add(preCourses[i]);
                        set.add(preCourses[i]);
                    }
                    
                }
            }
        }
        int[] res = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            res[i] = list.get(list.size() - i -1);
        }
        return res;
    }
}

 

posted on 2018-04-28 12:57  IncredibleThings  阅读(159)  评论(0编辑  收藏  举报