ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

课程表IV——leetcode1462

2021-12-28 13:33:10  阅读:227  来源: 互联网

标签:int graph IV prerequisites 先修 queries 课程表 new leetcode1462


课程表IV

题目:课程表 IV

你总共需要上 n 门课,课程编号依次为 0 到 n-1 。

prerequisites数对[1,0]表示1是0的先修课程。

对于每个查询对 queries[i] ,请判断 queries[i][0] 是否是 queries[i][1] 的先修课程。

请返回一个布尔值列表,列表中每个元素依次分别对应 queries 每个查询对的判断结果。

示例:

输入:n = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]]
输出:[true,true]

题解:拓扑排序+动态规划

  1. 建立拓扑图
  2. 根据拓扑图查找拓扑排序
  3. 在拓扑排序中,后继节的先修课程=前继结点的所有先修课程+前继节点(动态规划)
class Solution {
        public List<Boolean> checkIfPrerequisite(int numCourses, int[][] prerequisites, int[][] queries) {
            Queue<Integer> queue = new ArrayDeque<>();
            int indeg[] = new int[numCourses];
            Map<Integer, List<Integer>> graph = new HashMap<>();
            List<Boolean> res = new ArrayList<>();
            Set<Integer> sequence[]=new Set[numCourses];

            //建立拓扑图
            for (int i = 0; i < prerequisites.length; i++) {
                graph.putIfAbsent(prerequisites[i][0], new ArrayList<>());
                graph.get(prerequisites[i][0]).add(prerequisites[i][1]);
                indeg[prerequisites[i][1]]++;
            }

            //入度为0,入队列
            for (int i = 0; i < indeg.length; i++) {
                sequence[i]=new HashSet<>();
                if (indeg[i] == 0) {
                    queue.add(i);
                }
            }

            //寻找拓扑排序
            while(!queue.isEmpty())
            {
                int temp=queue.poll();
                if(graph.get(temp)!=null)
                {
                    for (Integer next : graph.get(temp)) {
                        //后继节的先修课程=前继结点的所有先修课程+前继节点
                        sequence[next].add(temp);
                        sequence[next].addAll(sequence[temp]);
                        if(--indeg[next]==0) queue.add(next);
                    }
                }
            }

            //判断queries
            for(int i=0;i<queries.length;i++)
            {
                if(sequence[queries[i][1]].contains(queries[i][0]))
                    res.add(true);
                else res.add(false);
            }

            return res;
        }
    }

 

标签:int,graph,IV,prerequisites,先修,queries,课程表,new,leetcode1462
来源: https://www.cnblogs.com/greengages/p/15740228.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有