当前位置: 首页 > news >正文

OJ练习第166题——课程表(拓扑排序问题)

课程表

力扣链接:207. 课程表

题目描述

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。

例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。
请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

示例

在这里插入图片描述

思路

拓扑排序问题,抓住节点入度和出度的本质特征。
方法一: 从入度思考(从前往后排序), 入度为0的节点在拓扑排序中一定排在前面, 然后删除和该节点对应的边, 迭代寻找入度为0的节点。
方法二: 从出度思考(从后往前排序), 出度为0的节点在拓扑排序中一定排在后面, 然后删除和该节点对应的边, 迭代寻找出度为0的节点。、

Java代码(从入度思考)

class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {List<List<Integer>> edgs = new ArrayList<List<Integer>>();for(int i = 0; i < numCourses; i++) {edgs.add(new ArrayList<Integer>());}int[] indeg = new int[numCourses];for(int[] p : prerequisites) {edgs.get(p[1]).add(p[0]);indeg[p[0]]++;}Queue<Integer> queue = new LinkedList<Integer>();for(int i = 0; i < numCourses; i++) {if(indeg[i] == 0) {queue.offer(i);}}int visited = 0;while(!queue.isEmpty()) {visited++;int u = queue.poll();for(int v : edgs.get(u)) {indeg[v]--;if(indeg[v] == 0) {queue.offer(v);}}}return visited ==numCourses;}
}

Java代码(从出度思考)

class Solution {List<List<Integer>> edgs;int[] visited;boolean valid = true;public boolean canFinish(int numCourses, int[][] prerequisites) {edgs = new ArrayList<List<Integer>>();for(int i = 0; i < numCourses; i++) {edgs.add(new ArrayList<Integer>());}visited = new int[numCourses];for(int[] p : prerequisites) {edgs.get(p[1]).add(p[0]);}for(int i = 0; i < numCourses && valid; i++) {if(visited[i] == 0) {dfs(i);}}return valid;}public void dfs(int u) {visited[u] = 1;for(int v : edgs.get(u)) {if(visited[v] == 0) {dfs(v);if(!valid) {return;}}else if(visited[v] == 1) {valid = false;return;}}visited[u] = 2;}
}

相关文章:

OJ练习第166题——课程表(拓扑排序问题)

课程表 力扣链接&#xff1a;207. 课程表 题目描述 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表…...

单臂路由实现VLAN间路由

单臂路由实现VLAN间路由 单臂路由 概述拓扑图PC配置LSW2 接入层交换机LSW3 接入层交换机LSW1 汇聚层交换机R1 路由器ping 测试 单臂路由 概述 单臂路由的原理是通过一台路由器&#xff0c;使 VLAN 间互通数据通过路由器进行三层转发。 如果在路由器上为每个 VLAN 分配一个单独…...

【VSCode】文件模板创建及使用.md

背景 最近使用VSCode学习Vue项目比较频繁&#xff0c;每次创建Vue文件都要手动写重复代码&#xff0c;特别麻烦&#xff0c;就上网查找自动生成代码的说明&#xff0c;结果发现VSCode有代码模板&#xff0c;怪怪&#xff0c;感觉发现新大陆了(low!)。 配置 打开配置 方式一&a…...

【漏洞复现】EnjoySCM存在文件上传漏洞

漏洞描述 EnjoySCM是一款适应于零售企业的供应链管理软件,主要为零售企业的供应商提供服务。EnjoySCM的目的是通过信息技术,实现供应商和零售企业的快速、高效、准确的信息沟通、管理信息交流。。 该系统存在任意文件上传漏洞,攻击者通过漏洞可以获取服务器的敏感信息。 …...

MaPLe: Multi-modal Prompt Learning

本文也是LLM系统的文章&#xff0c;主要是面向多模态的大语言模型&#xff0c;针对《MaPLe: Multi-modal Prompt Learning》的翻译。 MaPLe&#xff1a;多模态提示学习 摘要1 引言2 相关工作3 方法4 实验5 结论 摘要 CLIP等预先训练的视觉语言&#xff08;V-L&#xff09;模型…...

软件测试/测试开发丨Jenkins Pipeline 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/26711 1. Jenkins节点 1.1 常用的节点 内建节点SSH节点Java Web节点 1.1.1 SSH节点配置 远程工作目录 节点中必须有该目录&#xff0c;用于下载和运行j…...

java多线程——线程池

线程池 线程池创建线程池关闭线程池使用获取多个结果 线程池 一个线程池中存在许多准备运行的空闲线程&#xff0c;把Runnable对象交给线程池&#xff0c;会有一个线程调用其run()方法&#xff0c;当调用完后线程不会死亡&#xff0c;而是在池中继续为下一次请求服务 利用线程…...

Linux文件操作

目录 复制文件、目录 cp 移动 重命名文件或目录 mv 创建删除文件 touch rm(remove) 创建删除目录 mkdir(make directory) rmdir(remove directory) 复制文件、目录 cp cp(copy) 同一个目录下复制&#xff0c;所以重命名了一下&#xff1b;把它复制到linuxcast.net/目录下可以…...

Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)

多实例联动 一、Tomcat 多实例1.1 什么是Tomcat多实例&#xff1f;1.2 配置思路1.3 配置实现1.3.1 安装jdk1.3.2 安装tomcat1.3.3 配置 tomcat 环境变量1.3.4 修改端口号1.3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件&#xff0c;添加 tomcat 环境变量1.3.6 启…...

bootstrap和application的区别

SpringBoot项目的配置文件支持两种四个&#xff1a; bootstrap和application。 YML文件两个&#xff1a;bootstrap.yml&#xff0c;application.yml 属性文件两个&#xff1a;bootstrap.properties&#xff0c;application.properties 配置文件优先级 SpringBoot支持同时使用…...

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…...

vue 对axios进行封装

token配置、中英文配置、对所有接口统一设置防抖、对所有post接口统一设置节流 废话少说直接上代码 request.js import axios from axios // 使用element-ui Message做消息提醒 import { ElMessage } from element-plus//这是为了防止刁民反复切换页面&#xff0c;切换页面…...

第十二章 YOLO的部署实战篇(下篇-cuda)

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...

原生JavaScript+PHP多图上传实现

摘要 很多场景下需要选择多张图片上传&#xff0c;或者是批量上传以提高效率&#xff0c;多图上传的需求自然就比较多了&#xff0c;本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html <!DOCTYPE html> <html><head><titl…...

企业架构LNMP学习笔记30

1、upstream 中server的关键字&#xff1a;语法&#xff1a; upstream中的分发之后的几个关键字&#xff1a; 1&#xff09;backup 备 其他的没有backup标识的都不可用了&#xff0c;才分发到backup&#xff1b; 2&#xff09;down 此条配置&#xff0c;不会被分发到。 syst…...

数学建模算法汇总(全网最全,含matlab案例代码)

数学建模常用的算法分类 全国大学生数学建模竞赛中&#xff0c;常见的算法模型有以下30种&#xff1a; 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…...

openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法

文章目录 openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法概述解决思路备注补充 - 新问题 - N1吸嘴到底部相机十字中心的位置差了很多END openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法 概述 自从用openpnp后, 无论版本(dev/test), 都发现一个大概…...

怎么提高自己当众讲话的能力?

当众讲话是一项重要的沟通技能&#xff0c;它可以帮助你在各种场合中表达自己的观点、影响他人&#xff0c;并建立自信。虽然对很多人来说&#xff0c;当众讲话可能是一项挑战&#xff0c;但通过一些实践和技巧&#xff0c;你可以提高自己的当众讲话能力。下面是一些方法&#…...

孙哥Spring源码第20集

第20集 refresh()-invokeBeanFactoryPostProcessor 四-处理Configuration下的Bean生成代理对象 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 1、二行InvokeBeanFactoryPostProcessors的作用 registryProcessors&#xff1a;处理的…...

【计算机网络】HTTP(上)

文章目录 1.HTTP概念2. URLurlencode 和 urldecode转义规则 3. HTTP的宏观理解HTTP的请求HTTP的响应 4. 见一见HTTP请求和响应请求报头 1. 模拟一个简单的响应response响应报头 2. 从路径中获取内容ReadFile函数的实现 3.不同资源进行区分反序列化的实现ReadOneLine函数的实现P…...

ARIS:基于技能化工作流的AI自主研究系统设计与实践

1. 项目概述&#xff1a;ARIS&#xff0c;一个让AI在你睡觉时做研究的自主工作流 如果你是一名机器学习或计算机科学领域的研究者&#xff0c;我猜你肯定有过这样的体验&#xff1a;一个绝妙的想法在深夜闪现&#xff0c;你兴奋地爬起来记下几行潦草的笔记&#xff0c;然后第二…...

Aseprite插件AseIcoExport:一键生成Windows与macOS应用图标

1. 项目概述&#xff1a;一个被低估的图标导出工具如果你是一个独立开发者&#xff0c;或者在一个小团队里负责UI/UX设计到前端实现的完整链路&#xff0c;那你一定对“图标导出”这个环节又爱又恨。爱的是&#xff0c;一个精心设计的图标集能让产品界面瞬间提升质感&#xff1…...

魔百盒M301H-ZN代工_HI3798MV300H芯片_8822CS无线模块-深度定制与刷机实战指南

1. 魔百盒M301H-ZN硬件拆解与芯片解析 第一次拿到魔百盒M301H-ZN时&#xff0c;我差点被它朴实无华的外表骗了。拆开底部四颗螺丝后&#xff0c;内部布局清晰地展现在眼前&#xff1a;HI3798MV300H主控芯片位于主板中央&#xff0c;右上角是8822CS无线模块&#xff0c;存储芯片…...

硬件原型开发实战:从面包板到洞洞板的完整迁移指南

1. 项目概述&#xff1a;从概念到实物的必经之路在电子设计的漫长旅程中&#xff0c;从一张画满符号的电路图&#xff0c;到一台能稳定运行、看得见摸得着的设备&#xff0c;中间横亘着一道看似简单、实则至关重要的鸿沟——原型制作。这道鸿沟&#xff0c;就是“面包板”和“洞…...

掌握Superpowers Skills

Superpowers 是一套面向开发过程的插件化技能系统&#xff0c;旨在帮助个人开发者与团队更高效地完成从需求探索到代码交付的全流程。其内置的十余项技能覆盖了软件开发生命周期的各个关键节点&#xff0c;并且可以按照自然的工作流顺序进行分组与调用。 本文将基于 Superpower…...

IDEA里配置Druid连接池,别再手动导Jar包了!试试Maven/Gradle一键搞定

IDEA中配置Druid连接池&#xff1a;Maven/Gradle现代化依赖管理实战 在Java开发领域&#xff0c;依赖管理一直是项目构建的重要环节。记得刚入行时&#xff0c;我也曾手动下载各种Jar包&#xff0c;然后在IDE中逐个添加依赖。直到有一天&#xff0c;项目引用的Jar包版本冲突导致…...

Git Hooks与代码质量左移:self-review工具实战指南

1. 项目概述&#xff1a;从“自我审查”到“代码质量守护者”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫motiful/self-review。光看名字&#xff0c;你可能会觉得这又是一个关于代码审查流程或者团队协作规范的工具。但点进去仔细研究后&#xff0c;我发现它的定位非…...

Driver Store Explorer:彻底清理Windows驱动存储,让你的系统运行如新的专业工具

Driver Store Explorer&#xff1a;彻底清理Windows驱动存储&#xff0c;让你的系统运行如新的专业工具 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来…...

高效构建面试题库系统:React+Node全栈技术实战指南

高效构建面试题库系统&#xff1a;ReactNode全栈技术实战指南 【免费下载链接】mianshiya-public 持续维护的企业面试题库网站&#xff0c;帮你拿到满意 offer&#xff01;⭐️ 2026年最新Java面试题、前端面试题、AI大模型面试题、AI Agent面试题、RAG面试题、C面试题、Go面试…...

Vigil与其他监控工具集成:构建全方位监控体系的3种方案

Vigil与其他监控工具集成&#xff1a;构建全方位监控体系的3种方案 【免费下载链接】vigil &#x1f6a6; Microservices Status Page. Monitors a distributed infrastructure and sends alerts (Slack, SMS, etc.). 项目地址: https://gitcode.com/gh_mirrors/vig/vigil …...