课程表 II:拓扑i排序

news2024/11/25 9:25:41

Problem: 210. 课程表 II

文章目录

  • 思路
  • 解题方法
    • 1:首先新建一个inDegree数组用来存放所有的点的入度:`int[] inDegree = new int[numCourses];`
    • 2:然后遍历所有子数组将所有点及其入度存进去,这道题就是课程号本身为坐标,对应的值就是入度的数量:
    • 3:然后就是新建一个队列用来一个一个存放入度为0的点,下面这个代码其实作用就是第一次将一开始入度为0的点先存进去:
    • 4:只要队列不为空,我们就一直循环下去,先去出队列里面的元素放入结果数组中,然后删掉这个元素的指出去的边:
  • 复杂度
  • Code

思路

首先这道题是一道经典的拓扑排序题目,那么什么是拓扑排序呢?举例说明:

请添加图片描述
在上图中,左边这个图我们首先一个一个点的去判断他们的入度是多少,从左到右就是 (0:0),(1:1),(2:1),(3:2),然后我们先找到入度为0的点接下来删除掉这个点以及他指出去的边,然后重复这个过程,一个一个输出那些入度为0的点,这个图最终的拓扑排序就是:0,1,2,3或者0,2,1,3这样,那么知道了拓扑排序再来看这道题就很简单了

解题方法

 for(int[] edges :prerequisites){
            inDegree[edges[0]]++;
        }
  • 3:然后就是新建一个队列用来一个一个存放入度为0的点,下面这个代码其实作用就是第一次将一开始入度为0的点先存进去:

        Deque<Integer> q = new LinkedList();
        for(int i = 0;i<inDegree.length;i++){
            if(inDegree[i]==0){
                q.offer(i);
            }
        }
  • 4:只要队列不为空,我们就一直循环下去,先去出队列里面的元素放入结果数组中,然后删掉这个元素的指出去的边:

  int[] res = new int[numCourses];
        int index = 0;
        while(!q.isEmpty()){
            int node = q.poll();
            res[index++] = node;
            for(int[] edges : prerequisites){
                if(edges[1]==node){
                    inDegree[edges[0]]--;
                    if(inDegree[edges[0]]==0){
                        q.offer(edges[0]);
                    }
                }
            }

        }

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

  • 空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

Code


class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        
        int[] inDegree = new int[numCourses];

        for(int[] edges :prerequisites){
            inDegree[edges[0]]++;
        }

        Deque<Integer> q = new LinkedList();
        for(int i = 0;i<inDegree.length;i++){
            if(inDegree[i]==0){
                q.offer(i);
            }
        }


        int[] res = new int[numCourses];
        int index = 0;
        while(!q.isEmpty()){
            int node = q.poll();
            res[index++] = node;
            for(int[] edges : prerequisites){
                if(edges[1]==node){
                    inDegree[edges[0]]--;
                    if(inDegree[edges[0]]==0){
                        q.offer(edges[0]);
                    }
                }
            }

        }

        return index == numCourses? res:new int[0];

    }
}

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

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

相关文章

ASEMI代理长电可控硅PCR606:性能特点与应用领域

编辑-Z 可控硅&#xff08;Thyristor&#xff09;是一种半导体器件&#xff0c;具有高功率、高效率、高可靠性等优点。PCR606是一款常用的可控硅型号&#xff0c;广泛应用于各种电子设备中。本文将详细介绍PCR606的性能特点、工作原理以及在各个领域的应用。 一、PCR606性能特…

【算法学习系列】06 - 利用二分法查找有序数组中的某个数 num

文章目录 二分法说明实现 二分法验证实现暴力算法对数器使用验证结果 二分法 说明 二分法是一种常用的算法&#xff0c;也称为折半查找或二分查找。它适用于已经有序的数组中&#xff0c;通过将数组从中间划分成两个部分&#xff0c;每次根据目标值与中间值的大小比较来确定下…

基于InVEST模型的人类活动、重大工程生态成效评估、论文写作

查看原文>>>基于生态系统服务&#xff08;InVEST模型&#xff09;的人类活动、重大工程生态成效评估、论文写作 【学习目标】&#xff1a; 1) 采用InVEST模型&#xff0c;掌握产水&#xff08;包括水源涵养&#xff09;、碳存储&#xff08;包括固碳&#xff09;、土…

2023年最新苹果账号更改/注册为美区账号及免国外支付购买和充值美区App Store礼品卡教程

平时大家在使用IPhone手机时,应该有遇到软件明明是在App Store里上架的,但自己无论如何也搜索不到的情况吧!这种就是因为应用没有上架到你苹果账号所在的国家地区才导致的搜不到无法下载。比如:部分的新闻类、代[过滤]理类、游戏类应用以及Chat GPT等都无法在国区账号中搜索…

基于GPS+IMU的卡尔曼滤波融合定位算法MATLAB代码

资源地址&#xff1a; 基于GPSIMU的卡尔曼滤波融合定位算法MATLAB代码资源-CSDN文库 主要内容&#xff1a; 基于GPSIMU的卡尔曼滤波融合定位算法仿真,其中惯导用来进行状态预测,GPS用来滤波矫正&#xff0c;用于GPSIMU的卡尔曼滤波融合定位算法算法编程学习&#xff01;&…

如何以零停机时间或最少停机时间更新 Docker 容器,来确保应用程序持续可用

在现代应用程序开发和部署中&#xff0c;容器化技术已经成为一种常见的选择。Docker 容器的优势在于其轻量级、可移植性和可扩展性&#xff0c;但在更新容器时可能会面临停机时间的问题。本文将详细介绍如何以零停机时间或最少停机时间更新 Docker 容器&#xff0c;以确保应用程…

RedisTemplate

jedis是redis官网推荐的一个面向java客服端&#xff0c;库文件实现了对各类API进行封装调用。 lettuce是一个redis的驱动包&#xff0c;Lettuce译为生菜。 jedis和lettuce都是redis的客户端&#xff0c;他们可以连接redis服务器.但是在springbot2.0以后都是使用的Lettuce客户…

ImageCombiner是一个专门用于Java服务端图片合成的工具

1.1 项目背景 最近公司上了不少传播方面的需求&#xff0c;免不了合成各种营销图片&#xff0c;图片合成本身并不是什么高深的技术&#xff0c;但用底层api去搞确实繁琐&#xff0c;于是抽时间封装了一个小工具&#xff0c;初衷是解放生产力&#xff0c;后来发现挺好使&#x…

Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

前言 我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。 我们今天就来介绍一下如何实现VR设备控制第一人称: 1.角色手部跟随手柄移动和…

ERROR: No matching distribution found for ray解决办法

报错&#xff1a; from ray.rllib.algorithms.apex_dqn import ApexDQN ModuleNotFoundError: No module named ray 解决办法&#xff1a; pip install "ray[rllib]" -i https://pypi.tuna.tsinghua.edu.cn/simple

【网络技术】防火墙配置单机旁挂模式

组网需求 某公司网络部署Agile Controller服务器组&#xff0c;同时以旁挂方式部署FW于网络出口&#xff0c;如图1所示&#xff0c;要求&#xff1a; •用户角色不同&#xff0c;能访问的网络资源也不同&#xff08;在Agile Controller服务器中配置&#xff09;。 •用户角色…

k8s 中 pod 是如何做到网络共享的

前言 在k8s中, pod是编排的最小单位, 在同一个pod中, 容器之间能够共享hostname network 等内容. 共享network, 简单说就是同一个pod中的容器, 可以通过访问localhost互相访问, 且端口占用会冲突. 在之前的介绍中提到过, 容器的隔离是通过namespace技术实现的, 网络隔离自然…

Android新logcat使用技巧

Android新logcat使用技巧 logcat新UI出现后&#xff0c;我常困惑于怎么过滤log&#xff0c;和以前的UI差异比较大&#xff0c;新UI界面结构如下&#xff1a; 这个新的 logcat 的问题是如何过滤信息并不是很明显。 获取应用的日志信息 要获取我们当前调试应用的日志信息&…

技术大佬们都是怎么学习的?

目录 问题 熟悉更多业务 熟悉端到端 自学 Do exercise Learning trying Teaching 问题 今天逛帖子的时候&#xff0c;看到这么个问题&#xff1a; 这个问题我曾经也很好奇过&#xff0c;那些成为技术大佬的人当初是怎么学习&#xff0c;以及怎么成长过来的&#xff0…

就业内推 | 上市游戏公司,六险一金,最高30K*13薪

01 吉比特 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、参与公司整体网络规划&#xff0c;制定网络运行规范 2、负责网络监控、应急相应等日常运维工作&#xff0c;及时定位及故障处理 3、负责数据中心内基础架构维护 4、负责企业I…

低代码平台:解决项目管理中的瓶颈难题

随着数字化时代的到来&#xff0c;项目管理已经成为现代企业中不可或缺的一部分。尤其是在软件开发、信息技术、新产品开发等领域&#xff0c;项目管理的重要性更加凸显。然而&#xff0c;项目管理中存在着许多痛点和瓶颈难题&#xff0c;如项目周期长、成本高、协作难度大等。…

Spring Boot进阶(38):SpringBoot之跨域配置 | 超级详细,建议收藏

1. 前言&#x1f525; 我们都知道springboot默认日志是打印在控制台中的&#xff0c;不会以文件的形式进行保存。那么日后系统上线肯定是有需要对日志进行定位分析问题的&#xff0c;那么如何实现将控制台输出的日志保存起来&#xff1f; 这将又会是干货满满的一期&#xff0c;…

最新Java适配商城系统

城前端功能展示 商城移动端 后端基于SpringBoot 研发&#xff0c;前端使用 Vue、uniapp开发 前后端分离&#xff0c;支持分布式部署&#xff0c;支持Docker&#xff0c;各个API独立&#xff0c;并且有独立的消费者 api不需要单独部署&#xff0c;只需启动一个jar包就可以正…

c语言基础知识(知识点较为完整)

计算机和c语言基础知识 计算机常识 什么是计算机? 顾名思义&#xff0c;就是能够进行数据运算的机器(台式电脑、笔记本电脑、平板电脑、智能手机) 计算机_百度百科 计算机的发明者是谁 ? 关于电子计算机的发明者是谁这一问题&#xff0c;有好几种答案: 1936年英国数学家…

Lamini:大语言模型精调框架

Lamini&#xff1a;大语言模型精调框架 精调是大型语言模型 (LLM) 开发生命周期中最困难的部分之一。如果我们谈论的是诸如人类反馈强化学习 (RLHF) 之类的技术&#xff0c;那么这个过程尤其具有挑战性&#xff0c;因为这需要特别复杂的工作流程。 最近&#xff0c;我发现诞生…