Leetcode--210.课程表Ⅱ

现在你总共有 n 门课需要选,记为 0 到 n-1。

在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]

给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。

可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。

示例 1:

输入: 2, [[1,0]] 
输出: [0,1]
解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。
示例 2:

输入: 4, [[1,0],[2,0],[3,1],[3,2]]
输出: [0,1,2,3] or [0,2,1,3]
解释: 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
     因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3] 。
说明:

输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法。
你可以假定输入的先决条件中没有重复的边。
提示:

这个问题相当于查找一个循环是否存在于有向图中。如果存在循环,则不存在拓扑排序,因此不可能选取所有课程进行学习。
通过 DFS 进行拓扑排序 - 一个关于Coursera的精彩视频教程(21分钟),介绍拓扑排序的基本概念。
拓扑排序也可以通过 BFS 完成。

 

思路:拓扑排序

 

代码:

class Solution {

    public int[] findOrder(int numCourses, int[][] prerequisites) {

        List<Integer> lists[] = new ArrayList[numCourses];//记录某个节点可以到达的节点集合

        int invalue[] = new int[numCourses];//记录每个节点的入度

        for(int i=0;i<prerequisites.length;i++){

            invalue[prerequisites[i][0]]++;

            if(lists[prerequisites[i][1]]==null){

                lists[prerequisites[i][1]] = new ArrayList<>();

            }

            lists[prerequisites[i][1]].add(prerequisites[i][0]);

        }

        Queue<Integer> queue = new LinkedList<>();

        for(int i=0;i<numCourses;i++){

            if(invalue[i]==0){

                queue.add(i);

            }

        }

        int result[] = new int[numCourses];

        int count=0;

        while(!queue.isEmpty()){

            int size = queue.size();

            while(size-->0){

                int t = queue.poll();

                result[count++]=t;

                if(lists[t]==null) continue;

                for(int i=0;i<lists[t].size();i++){

                    invalue[lists[t].get(i)]--;

                    if(invalue[lists[t].get(i)]==0){

                        queue.add(lists[t].get(i));

                    }

                }

            }

        }

        if(count==numCourses) return result;

        else return new int[0];

 

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前后端分离使用 Token 登录解决方案

前后端分离使用 Token 登录解决方案&#xff1a;https://juejin.im/post/5b7ea1366fb9a01a0b319612转载于:https://www.cnblogs.com/bydzhangxiaowei/p/9768945.html

新能源关键技术预见的研究

来源&#xff1a;微信公众号科学家&#xff0c;原载于《今日科苑》2020年第11期作者&#xff1a;刘进萍、卢世刚1. 引言新能源是指采用新技术和新材料正在开发利用的新型能源&#xff0c;既包括风能、太阳能、生物质能等可再生能源&#xff0c;也包括核能、氢能等其他非化石能源…

Leetcode--152. 乘积最大子数组(java)

给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出…

淘淘相关工具类【json,httpClient,id,FTP,exception,cookie(包括共享cookie的设置等)】

json package com.taotao.common.utils;import java.util.List;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper;public class JsonUtils {// 定义jackson对…

谷歌前CEO:美国科技优势面临最危险时刻

文章来源&#xff1a;VOA&#xff0c;2021-03-28 &#xff0c;不代表本平台立场图片来源&#xff1a;GETTY IMAGES、知乎、网络等编辑&#xff1a;阿丽西娅中国在人工智能&#xff08;AI&#xff09;发展的多项指标上直逼美国优势&#xff0c;有些领域甚至已经实现超越。许多分…

HashMap源码分析(搞懂HashMap看这个就够了)

首先来看看HashMap&#xff0c;从构造函数看起 HashMap有四个构造函数 第一个&#xff1a; public HashMap() {this.loadFactor DEFAULT_LOAD_FACTOR; // all other fields defaulted} 无参的构造函数&#xff0c;初始容量为默认的16不变&#xff0c;loadFactor为负载因子…

CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想

面向对象编程思想 1.面向过程 ​ 从计算机执行角度出发 &#xff0c;代码执行过程核心为从程序的运行过程出发,构建编程思路,例&#xff1a; 哥德巴赫猜想 // 面向过程1 用户输入一个数n2 验证数字的正确性2.1 正确就继续向下2.2 错误就重复输入3 拆数 循环 nab4.判断 a和b同…

波士顿动力的仓库机器人Strentch来了,挑战每小时搬运800个箱子

来源&#xff1a; 雷锋网作者&#xff1a;杨丽编译&#xff1a;TheVerge雷锋网讯&#xff0c;波士顿动力以其机器狗Spot和双足人形机器人Atlas而闻名。不过近年来&#xff0c;该公司开始将目光投放到物流领域&#xff0c;并于日前发布了一款名为Strentch的新型仓库物流机器人。…

Leetcode--1371. 每个元音包含偶数次的最长子字符串(Java)

给你一个字符串 s &#xff0c;请你返回满足以下条件的最长子字符串的长度&#xff1a;每个元音字母&#xff0c;即 a&#xff0c;e&#xff0c;i&#xff0c;o&#xff0c;u &#xff0c;在子字符串中都恰好出现了偶数次。 示例 1&#xff1a; 输入&#xff1a;s "elee…

下一代人工智能

来源&#xff1a;人机与认知实验室翻译&#xff1a;朱浩然摘要&#xff1a;人工智能和机器学习的最新研究在很大程度上强调了通用学习和越来越大的训练集以及越来越多的计算。相反&#xff0c;我提出了一种以认知模型为中心的混合&#xff0c;知识驱动&#xff0c;基于推理的方…

Leetcode--5. 最长回文子串(java)

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

图论-第k短路

A* 做法 \(f(p)g(p)h(p)\) &#xff0c; \(f(p)\) 作为优先队列比较函数用来比较的值&#xff0c; \(g(p)\) 是当前路径到 \(p\) 的距离&#xff0c; \(h(p)\) 是 \(p\) 点到终点最短路&#xff08;预处理可以得到&#xff09;。 每个点出队次数 \(k\)&#xff0c;就说明当前找…

Arm十年最大更新:V9架构正式发布

来源&#xff1a;由半导体行业观察&#xff08;ID:icbank&#xff09;编译&#xff1a;「anandtech」自Arm在2011年10月首次发布Armv8架构以来&#xff0c;已经过去了近十年的时间。这对Arm来说是一个相当可观的十年&#xff0c;因为在这段时间内&#xff0c;他们的指令集架构受…

输出错误信息

在error页面加以下代码&#xff0c;之后检查网页源代码就会出现错误信息 (URL,Exception是后台传过来的参数) <div><div th:utext"<!--" th:remove"tag"></div><div th:utext"Failed Request URL : ${url}" th:remove…

Lodop打印设计界面生成代码带”...(省略)”

Lodop的设计界面中&#xff0c;菜单里的生成代码&#xff0c;如果打印项内容过多&#xff0c;后面会显示”...(省略)”&#xff0c;省略的是打印项的内容值&#xff0c;无论是纯文本还是超文本&#xff0c;都可以用选中打印项-右键-设置属性里找到该打印项的全部值&#xff0c;…

南洋理工大学研发植物“通信”设备,未来可成为环境探测器

来源&#xff1a;MEMS 最新研究成果由新加坡南洋理工大学&#xff08;NTU&#xff09;领导的一个科学家团队开发了一种可以向植物发送电信号和从植物接收电信号的设备&#xff0c;为利用植物的新技术打开了大门。团队的发现于今年1月25日刊登于国际知名科学期刊《自然》属下的…

服务器核心知识

电脑&#xff1a;辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑&#xff01;不管是桌上型电脑(桌机)、笔记型电脑(笔电)、平板电脑、智慧型手机等等&#xff0c;这些东西都算是电脑。虽然接触的这么多&#xff0c;但是&#xff0c;你了解电脑里面的元件有什么吗&#xff1f…

Spring AOP解析

AOP: Aspect Oriented Programming 面向切面编程。 AOP底层实现原理&#xff1a;代理模式 什么是代理模式&#xff1f; 通过代理控制对象的访问,可以详细访问某个对象的方法&#xff0c;在这个方法调用处理&#xff0c;或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程…

杜克大学和Facebook联手开发更好的光通信

来源&#xff1a;IEEE电气电子工程师Illustration: Duke UniversityA close-up depiction of the new fiber-free optical WiFi antenna. Silver nanocubes are spaced just a few nanometers above a silver base, with fluorescent dyes sandwiched in between. The physical…

Leetcode--287. 寻找重复数(Java)

给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4…