拓扑排序相关leetcode算法题

news2024/9/26 5:21:48

文章目录

  • 1.课程表
  • 2.课程表II
  • 3.火星词典

1.课程表

课程表
在这里插入图片描述

class Solution {
    //进行一次拓扑排序即可
public:
    bool canFinish(int n, vector<vector<int>>& prerequisites) {
        unordered_map<int,vector<int>> edges;//使用邻接表存图
        vector<int> in(n);//存储各个顶点的入度
        //1.建图
        for(auto& e: prerequisites)
        {
            int a = e[0],b=e[1];//b->a
            edges[b].push_back(a);
            in[a]++;
        }
        //2.一次BFS
        queue<int> q;
        for(int i=0;i<n;i++)
        {
            if(in[i]==0) q.push(i);
        }
        while(q.size())
        {
            auto t = q.front();q.pop();
            for(auto a:edges[t])
            {
                in[a]--;
                if(in[a] == 0) q.push(a);
            }
        }
        //3.判断
        for(int i=0;i<n;i++)
        {
            if(in[i]) return false;
        }
        return true;
    }
};

2.课程表II

课程表II
在这里插入图片描述

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> edges(numCourses);//使用邻接表存图
        vector<int> in(numCourses);//存储每个顶点的入度信息
        //1.建图
        for(auto& e:prerequisites)
        {
            int a = e[0],b=e[1];//b->a
            edges[b].push_back(a);
            in[a]++;
        }
        //2.进行拓扑排序
        queue<int> q;
        vector<int> ret;
        for(int i=0;i<numCourses;i++)
        {
            if(in[i] == 0)
            {
                q.push(i);
                ret.push_back(i);
            }
        }
        //3.一次BFS
        while(q.size())
        {
            auto t = q.front();q.pop();
            for(int a:edges[t])
            {
                in[a]--;
                if(in[a] == 0)
                {
                    q.push(a);
                    ret.push_back(a);
                }
            }
        }
        //4.判断
        if(ret.size() == numCourses) return ret;
        else return {};
    }
};

3.火星词典

火星词典
在这里插入图片描述

class Solution {
    unordered_map<char,unordered_set<char>> edges;//存储图结构
    unordered_map<char,int> in;//存储顶点入度信息
    bool cheak;//处理边界情况
public:
    string alienOrder(vector<string>& words) {
        //1.存图+初始化入度哈希表
        for(auto& s:words)
        {
            for(auto ch: s)
            {
                in[ch] = 0;
            }
        }
        int n = words.size();
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                add(words[i],words[j]);
                if(cheak) return "";
            }
        }
        //2.拓扑排序
        queue<char> q;
        string ret;
        for(auto&[a,b] : in)
        {
            if(b==0) q.push(a);
        }
        //3.一次BFS
        while(q.size())
        {
            char t = q.front();q.pop();
            ret+=t;
            for(auto a: edges[t])
            {
                if(--in[a]==0) q.push(a);
            }
        }
        //4.判断
        for(auto&[a,b] : in)
        {
            if(b!=0) return "";
        }
        return ret;
    }
    void add(string& s1, string& s2)
    {
        int n = min(s1.size(),s2.size());
        int i=0;
        for(;i<n;i++)
        {
            if(s1[i] != s2[i])
            {
                char a = s1[i],b = s2[i];//a->b
                if(!edges.count(a) || !edges[a].count(b))
                {
                    edges[a].insert(b);
                    in[b]++;
                }
                break;
            }
        }
         //abc ab 如此的处理一下,不合法
        if(i==s2.size() && i<s1.size()) cheak = true;
    }
};

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

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

相关文章

一起玩儿物联网人工智能小车(ESP32)——14. 用ESP32的GPIO控制智能小车运动起来(二)

摘要&#xff1a;本文主要讲解如何使用Mixly实现对单一车轮的运动控制。 下面就该用程序控制我们的小车轮子转起来了。打开Mixly软件&#xff0c;然后单击顶部“文件”菜单中的“新建”功能&#xff0c;我们来开启一个新程序的开发工作。 我们的工作同样是先从最简单的开始&am…

Java内存区域与内存溢出异常

Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 2.1 概述 对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——即拥有每一个对象的“所有权”,又…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了&#xff1a; Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

DRF之初识

目录 一、序列化和反序列化 【1】序列化 【2】反序列化 【3】小结 二、DRF的安装和快速使用 (1) 安装DRF&#xff1a; (2) 配置DRF&#xff1a; (3) 创建序列化器(Serializer)&#xff1a; (4) 创建视图(View)&#xff1a; (5) 配置URL路由&#xff1a; 【补充】下载…

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(下篇)

原创 | 文 BFT机器人 【原文链接】使用Open3D实现3D激光雷达可视化&#xff1a;以自动驾驶的2DKITTI深度框架为例&#xff08;上篇&#xff09; 05 Open3D可视化工具 多功能且高效的3D数据处理&#xff1a;Open3D是一个全面的开源库&#xff0c;为3D数据处理提供强大的解决方…

【LeetCode】链表精选12题

目录 快慢指针&#xff1a; 1. 相交链表&#xff08;简单&#xff09; 2. 环形链表&#xff08;简单&#xff09; 3. 快乐数&#xff08;简单&#xff09; 4. 环形链表 II&#xff08;中等&#xff09; 5. 删除链表的倒数第 N 个节点&#xff08;中等&#xff09; 递归迭…

WPF中数据绑定转换器Converter

使用场景&#xff1a;ViewModel中的数据如果跟View中的数据类型不匹配。 下面是以int类型调控是否可见为例子 步骤一&#xff1a;创建转换器类 在xaml中查看Converter的定义可以知道Converter是一个接口类型&#xff0c;因此转换器的类定义需要使用这个接口 internal class Vi…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为&#xff0c;UML中最重要的图之一。 而且序列图&#xff0c;对于业务建模&#xff0c;也有非常好…

echarts 柱状图

注意点 1.y轴显示的序号和名称需要在数据中拼接&#xff0c;而不是在y轴data中拼接&#xff0c; 数据过多会导致下拉的时候&#xff0c;触发y轴formatter&#xff0c;更新序号&#xff0c;序号会重新排列&#xff0c;不准确。 2.需用到堆叠效果&#xff0c;三个柱子。如果想…

PyTorch官网demo解读——第一个神经网络(3)

上一篇&#xff1a;PyTorch官网demo解读——第一个神经网络&#xff08;2&#xff09;-CSDN博客 上一篇文章我们讲解了第一个神经网络的模型&#xff0c;这一篇我们来聊聊梯度下降。 大佬说梯度下降是深度学习的灵魂&#xff1b;梯度是损失函数&#xff08;代价函数&#xff…

百度百科词条编辑需要提供参考资料,那么如何找参考资料呢。

百度百科相信大家都不陌生&#xff0c;在查询一个概念、新事物&#xff0c;或者我们想要了解的企业和人物时&#xff0c;我们一般都会求助百度百科&#xff0c;因为百度百科上面的信息相较于其他平台更值得我们相信。从词条所属主体来说&#xff0c;百度百科平台也是向其他用户…

20231224解决outcommit_id.xml1 parser error Document is empty的问题

20231224解决outcommit_id.xml1 parser error Document is empty的问题 2023/12/24 18:13 在开发RK3399的Android10的时候&#xff0c;出现&#xff1a;rootrootrootroot-X99-Turbo:~/3TB/Rockchip_Android10.0_SDK_Release$ make installclean PLATFORM_VERSION_CODENAMEREL…

Ubuntu18.04安装GTSAM库(亲测可用)

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;和SFM&#xff08;Structure from Motion&#xff09;这些复杂的估计问题中&#xff0c;因子图算法以其高效和灵活性而脱颖而出&#xff0c;成为图模型领域的核心技术。GTSAM&#xff08;Georgia Tech Smo…

不用再找了,这就是 NLP 方向最全面试题库

大家好&#xff0c;本篇文章总结了自然语言处理(NLP)面试需要准备的学习笔记与资料&#xff0c;该资料目前包含自然语言处理各领域的面试题积累。 热门面试题&#xff08;校招、社招&#xff09;、公司级专项真题、大厂常考题等&#xff0c;在我们社群具有总结&#xff0c;喜欢…

DevC++ easyx实现视口编辑,在超过屏幕大小的地图上画点,与解决刮刮乐bug效果中理解C语言指针的意义

继上篇文案&#xff0c; DevC easyx实现地图拖动&#xff0c;超过屏幕大小的巨大地图的局部显示在屏幕的方法——用悬浮窗的原理来的实现一个视口-CSDN博客 实现了大地图拖动&#xff0c;但是当时野心不止&#xff0c;就想着一气能搓啥就继续搓啥&#xff0c;看着地图移动都搓…

转录组无参比对教程

写在前面 2023年将结束&#xff0c;小杜的生信笔记分享个人学习笔记也有2年的时间。在这2年的时间中&#xff0c;分享算是成为工作、学习和生活中的一部分。自己为了运行和维护社群也算花费大量的时间和精力&#xff0c;自己认为还算满意吧。对于个人来说&#xff0c;自己一直…

Docker介绍、常用命令与操作

Docker介绍、常用命令与操作 学习前言为什么要学习DockerDocker里的必要基础概念常用命令与操作1、基础操作a、查看docker相关信息b、启动或者关闭docker 2、容器操作a、启动一个镜像i、后台运行ii、前台运行 b、容器运行情况查看c、日志查看d、容器删除 3、镜像操作a、镜像拉取…

使用 Docker 部署企业培训系统 PlayEdu

1&#xff09;PlayEdu 介绍 官网&#xff1a;https://www.playedu.xyz/ GitHub&#xff1a;https://github.com/PlayEdu/PlayEdu PlayEdu 是一款适用于搭建内部培训平台的开源系统&#xff0c;旨在为企业/机构打造自己品牌的内部培训平台。PlayEdu 基于 Java MySQL 开发&…

C语言--直接插入排序【排序算法|图文详解】

一.直接插入排序介绍&#x1f357; 直接插入排序又叫简单插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;它通过构建有序序列&#xff0c;对于未排序的数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。 算法描述&#xff1a; 假设要排序…

Golang实现JAVA虚拟机-运行时数据区

一、运行时数据区概述 JVM学习&#xff1a; JVM-运行时数据区 运行时数据区可以分为两类&#xff1a;一类是多线程共享的&#xff0c;另一类则是线程私有的。 多线程共享的运行时数据区需要在Java虚拟机启动时创建好&#xff0c;在Java虚拟机退出时销毁。对象实例存储在堆区类信…