17.优化算法之解决拓扑排序4

0.基础 

1.课程表1 

207. 课程表 - 力扣(LeetCode)

class Solution {public boolean canFinish(int n, int[][] p) {// 1. 准备⼯作int[] in = new int[n]; // 统计每⼀个顶点的⼊度Map<Integer, List<Integer>> edges = new HashMap<>(); // 邻接表存图// 2. 建图for (int i = 0; i < p.length; i++) {int a = p[i][0], b = p[i][1]; // b -> aif (!edges.containsKey(b)) {edges.put(b, new ArrayList<>());}edges.get(b).add(a);in[a]++;}// 3. 拓扑排序Queue<Integer> q = new LinkedList<>();// (1) 先把⼊度为 0 的点,加⼊到队列中for (int i = 0; i < n; i++) {if (in[i] == 0)q.add(i);}// (2) bfswhile (!q.isEmpty()) {int t = q.poll();for (int a : edges.getOrDefault(t, new ArrayList<>())) {in[a]--;if (in[a] == 0)q.add(a);}}// 4. 判断是否有环for (int x : in)if (x != 0)return false;return true;}
}

2.课程表2

210. 课程表 II - 力扣(LeetCode)

class Solution {public int[] findOrder(int n, int[][] prerequisites) {// 1. 准备⼯作int[] in = new int[n]; // 统计每个顶点的⼊度List<List<Integer>> edges = new ArrayList<>();for (int i = 0; i < n; i++) {edges.add(new ArrayList<>());}// 2. 建图for (int i = 0; i < prerequisites.length; i++) {int a = prerequisites[i][0], b = prerequisites[i][1]; // b -> aedges.get(b).add(a);in[a]++;}// 3. 拓扑排序Queue<Integer> q = new LinkedList<>();int[] ret = new int[n];int index = 0;for (int i = 0; i < n; i++) {if (in[i] == 0)q.add(i);}while (!q.isEmpty()) {int t = q.poll();ret[index++] = t;for (int a : edges.get(t)) {in[a]--;if (in[a] == 0)q.add(a);}}if (index == n)return ret;return new int[0];}
}

3.火星词典

LCR 114. 火星词典 - 力扣(LeetCode)

 

class Solution {Map<Character, Set<Character>> edges = new HashMap<>(); // 邻接表Map<Character, Integer> in = new HashMap<>(); // 统计每个节点的⼊度boolean check;public String alienOrder(String[] words) {// 1. 初始化⼊度哈希表 + 建图for (String s : words) {for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);in.put(ch, 0);}}int n = words.length;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {add(words[i], words[j]);if (check == true)return "";}}// 2. 拓扑排序Queue<Character> q = new LinkedList<>();for (char ch : in.keySet()) {if (in.get(ch) == 0)q.add(ch);}StringBuffer ret = new StringBuffer();while (!q.isEmpty()) {char t = q.poll();ret.append(t);if (!edges.containsKey(t))continue;for (char ch : edges.get(t)) {in.put(ch, in.get(ch) - 1);if (in.get(ch) == 0)q.add(ch);}}// 3. 判断for (char ch : in.keySet()) {if (in.get(ch) != 0)return "";}return ret.toString();}public void add(String s1, String s2) {int n = Math.min(s1.length(), s2.length());int i = 0;for (; i < n; i++) {char c1 = s1.charAt(i), c2 = s2.charAt(i);if (c1 != c2) {// c1 -> c2if (!edges.containsKey(c1)) {edges.put(c1, new HashSet<>());}if (!edges.get(c1).contains(c2)) {edges.get(c1).add(c2);in.put(c2, in.get(c2) + 1);}break;}}if (i == s2.length() && i < s1.length())check = true;}
}

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

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

相关文章

第六十周:文献精读

目录 摘要 Abstract 文献阅读&#xff1a;可解释多水平时间序列预测的时间融合Transformer 一、多水平预测&#xff08;Multi-horizon forecasting&#xff09; 二、过去相关研究 三、现存问题 四、提出方法 五、模型架构 1、门控残差网络(GRN) 2、变量选择网络 3、…

android中activity与fragment之间的各种跳转

我们以音乐播放、视频播放、用户注册与登录为例【Musicfragment&#xff08;音乐列表页&#xff09;、Videofragment&#xff08;视频列表页&#xff09;、MusicAvtivity&#xff08;音乐详情页&#xff09;、VideoFragment&#xff08;视频详情页&#xff09;、LoginActivity&…

开始尝试从0写一个项目--后端(二)

实现学生管理 新增学生 接口设计 请求路径&#xff1a;/admin/student 请求方法&#xff1a;POST 请求参数&#xff1a;请求头&#xff1a;Headers&#xff1a;"Content-Type": "application/json" 请求体&#xff1a;Body&#xff1a; id 学生id …

OneFormer

按照INSTALL.md无法安装natten&#xff0c;不建议复现

1120 买地攻略

solution 土地需要连续&#xff0c;联想到用前缀和。用前缀和表示前i块土地的总价钱&#xff0c;易得任意片连续的土地价格 #include<iostream> using namespace std; const int maxn 1e4 10; int main(){int n, m, price[maxn] {0}, ans 0;scanf("%d%d"…

网络状态的智能感知:WebKit 支持 Network Information API 深度解析

网络状态的智能感知&#xff1a;WebKit 支持 Network Information API 深度解析 在现代 Web 应用中&#xff0c;理解用户的网络连接状态对于提供适应性体验至关重要。Network Information API&#xff0c;一个新兴的 Web API&#xff0c;允许 Web 应用访问设备的网络信息&…

creature_template_movement

creature_template_movement CreatureId 链接 creature_template.entry HoverInitiallyEnabled creature 模板是否允许初始悬浮状态&#xff0c;取值 0 / 1 Chase creature 模板的追逐运动状态 0&#xff1a;奔跑1&#xff1a;可行走2&#xff1a;始终行走 Random creature 模板…

IT高手修炼手册(4)PowerShell命令

一、前言 PowerShell是一个功能强大的命令行界面和脚本环境&#xff0c;它允许用户管理Windows操作系统和应用程序。 二、文件和目录操作 Get-ChildItem&#xff1a;列出指定路径下的文件和文件夹。简写为ls或dir。 Copy-Item&#xff1a;复制文件和文件夹。简写为copy或cp。 M…

python基础篇(8):异常处理

在Python编程中&#xff0c;异常是程序运行时发生的错误&#xff0c;它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误&#xff0c;并进行适当的处理&#xff0c;从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种&#xff0c;语法错…

Python文件写入操作

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/b19a7c910cf6​​ 在Python编程中&#xff0c;文件操作是一项基础且重要的技能。本文将详细介绍如何使用Python将列表内容写入文件以实现文件…

openmv的modbus0x10功能码疑问

代码位于&#xff1a;openmv/scripts/libraries/modbus.py https://github.com/openmv/openmv/blob/master/scripts/libraries/modbus.py REQUEST self.uart.read()if debug:print("GOT REQUEST: ", REQUEST)additional_address REQUEST[0]error_check REQUEST[-…

演化计算的学习

一、概念 演化计算是一种基于生物进化原理的计算方法&#xff0c;旨在通过模拟自然选择、遗传变异和繁殖等生物进化过程来解决复杂的优化问题。 它主要包括遗传算法、进化策略和遗传编程等。遗传算法通过对染色体&#xff08;解的编码&#xff09;的操作&#xff0c;如选择、交…

数据统计与数据分组18-25题(30 天 Pandas 挑战)

数据统计与数据分组 1. 知识点1.18 分箱与统计个数1.19 分组与求和统计1.20 分组获取最小值1.21 分组获取值个数1.22 分组与条件查询1.23 分组与条件查询及获取最大值1.24 分组及自定义函数1.25 分组lambda函数统计 2. 题目2.18 按分类统计薪水&#xff08;数据统计&#xff09…

ESP32CAM物联网教学10

ESP32CAM物联网教学10 MicroPython 应用体验 小智偶然地发现&#xff0c;有一种新兴的编程模式MicroPython&#xff0c;也能编写ESP32Cam的应用程序了&#xff0c;于是欣然地体验了一把。 编程环境搭建 小智偶然地从下面这家店铺买了一块ESP32Cam&#xff0c;并从客服那里得到…

Angular基础保姆级教程 - 1

Angular 基础总结&#xff08;完结版&#xff09; 1. 概述 Angular 是一个使用 HTML、CSS、TypeScript 构建客户端应用的框架&#xff0c;用来构建单页应用程序。 Angular 是一个重量级的框架&#xff0c;内部集成了大量开箱即用的功能模块。 Angular 为大型应用开发而设计…

花所Flower非小号排名20名下载花所Flower

1、Flower花所介绍 Flower花所是一家新兴的数字货币交易平台&#xff0c;致力于为全球用户提供安全、便捷的交易体验。平台以其强大的技术支持和丰富的交易产品闻名&#xff0c;为用户提供多样化的数字资产交易服务&#xff0c;涵盖了主流和新兴数字货币的交易需求。 2. Flowe…

安全与环境学报

《安全与环境学报》 创刊于2001年&#xff0c;是安全与环境学科的学术性月刊&#xff0c;国内外公开发行&#xff0c;刊号为ISSN 1009-6094、CN 11-4537/X&#xff0c;由北京理工大学、中国环境科学学会和中国职业安全健康协会主办&#xff0c;第十一、十二届全国人大常委会委员…

怎样让家长单独查到自己孩子的期末成绩?

期末考试的钟声已经敲响&#xff0c;随着最后一份试卷的收卷&#xff0c;学生们的紧张情绪渐渐平息。然而&#xff0c;对于老师们来说&#xff0c;这仅仅是另一个忙碌周期的开始。成绩的统计、分析、反馈&#xff0c;每一项工作都不容小觑。尤其是将成绩单一一私信给家长&#…

静态路由只配置下一跳与同时配置下一跳和出接口的区别

配置静态路由时&#xff0c;可以指定出接口或下一跳地址&#xff0c;具体取决于情况。 实际上&#xff0c;所有路由项都需要明确下一跳地址&#xff0c;因为在发送报文时&#xff0c;首先根据报文的目的地址寻找路由表中与之匹配的路由&#xff0c;只有指定了下一跳地址&#…

计算机图形学bezier曲线曲面B样条曲线曲面

b站视频 文章目录 曲线曲面基本理论曲线&#xff08;面&#xff09;参数表示1、显示、隐式和参数表示2、显式或隐式表示存在的问题3、参数方程 曲线曲面基本理论 计算机图形学三大块内容:光栅图形显示、几何造型技术、真实感图形显示。光栅图形学是图形学的基础&#xff0c;有…