Leetcode刷题笔记--Hot61-70

news2024/11/26 4:36:28

1--课程表(207)

主要思路:

        用 in 记录每一门课程剩余的先修课程个数,当剩余先修课程个数为0时,将该课程加入到队列q中。

        每修队列q中的课程,以该课程作为先修课程的所有课程,其剩余先修课程个数减1;

        不断将剩余先修课程数为0的课程加入到队列q中,当队列为空时,若修的课程数等于总课程数,则返回true,否则返回false;

#include <iostream>
#include <vector>
#include <queue>

class Solution {
public:
    bool canFinish(int numCourses, std::vector<std::vector<int>>& prerequisites) {
        std::vector<std::vector<int>> out; // 存储每一个先修课程对应的课程
        std::vector<int> in; // 存储每一个课程对应的剩余先修课程的个数
        std::queue<int> q; // 存储可以修的课程

        out.resize(numCourses);
        in.resize(numCourses);

        // 初始化
        for(auto pair : prerequisites){
            int cur = pair[0]; // 当前课程
            int pre = pair[1]; // 当前课程的先修课程
            out[pre].push_back(cur); // 初始化out
            in[cur]++;
        }

        // 选取可以直接修的课程加入到队列q中
        for(int i = 0; i < numCourses; i++){
            if(in[i] == 0) q.push(i);
        }

        int num = 0; // 已经修过的课程数
        while(!q.empty()){
            int tmp = q.front(); // 修弹出的课程
            q.pop();
            num++;
            // 以tmp作为先修课程的课程,其剩余的先修课程数减1
            for(auto course : out[tmp]){
                in[course] --;
                if(in[course] == 0) q.push(course); // course没有需要先修的课程了,因此可以加入到队列q中
            }
        }
        if(num == numCourses) return true;
        else return false;
    }
};

int main(int argc, char* argv[]){
    // numCourses = 2, prerequisites = [[1,0],[0,1]]
    std::vector<std::vector<int>> test = {{1, 0}, {0, 1}};
    int numCourses = 2;
    Solution S1;
    bool res = S1.canFinish(numCourses, test);
    if(res) std::cout << "true" << std::endl;
    else std::cout << "false" << std::endl;
    return 0;
}

2--

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

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

相关文章

安卓camera2获取到的YUV420_888格式详解

本文字数&#xff1a;7885字 预计阅读时间&#xff1a;45分钟 安卓音视频开发中的一个环节是摄像头采集数据&#xff0c;而 Android 平台上摄像头采集的 API 有两套&#xff0c;camera1 和 camera2。本文主要讲的是 camera2 这套 API 在采集数据并指明 YUV420_888 格式时&#…

软件设计师_面向对象_学习笔记

文章目录 1 面向对象基本概念2 设计模式3 UML4 设计模式4.1 设计模式的基本概念4.2 设计模式的分类4.3 创建型模式 1 面向对象基本概念 2 设计模式 3 UML 4 设计模式 4.1 设计模式的基本概念 模式&#xff1a;通俗的来说就是成功方案的复用。 架构模式从全局看待问题。设计模式…

芯片学习记录TLP291-4

TLP291-4 芯片介绍 东芝TLP291-4由光学耦合到红外LED的光电晶体管组成。TLP291-4光电耦合器安装在非常小而薄的SO16封装中。由于TLP291-4在宽工作温度范围内得到保证&#xff08;Ta-55至110&#xff09;&#xff0c;因此适用于高密度表面贴装应用&#xff0c;例如可编程控制器…

快速排序全面详解

目录 1 基本思想 2 排序步骤 3 代码实现 3.1 区间划分算法&#xff08;hoare初始版本&#xff09;&#xff1a; 3.2 主框架 4 区间划分算法 4.1 hoare法 4.2 挖坑法 4.3 前后指针法 5 快排优化 5.1 取key方面的优化 5.2 递归方面的优化 5.3 区间划分方面的优化 6…

终极Whois查询工具:优雅美观、功能强大、信息全面

1. 引言 这个程序的适用面不是很广&#xff0c;但对于域名爱好者&#xff0c;我想这会是一个不错的工具。 查询一个域名的Whois&#xff0c;这样的工具有很多。但是显示的数据却是有点差强人意&#xff0c;一次偶然的机会发现了 who.cx 这个whois工具&#xff0c;不得不说界面…

Android组件通信——Service(二十七)

1. Service 1.1 知识点 &#xff08;1&#xff09;掌握Service与Activity的区别&#xff1b; &#xff08;2&#xff09;掌握Service的定义及使用&#xff1b; &#xff08;3&#xff09;可以使用ServiceConnection 接口绑定一个Service&#xff1b; &#xff08;4&#x…

java js 经纬度转换 大地坐标(高斯投影坐标)与经纬度互相转换

项目中有大地坐标(高斯投影坐标)与经纬度互相转换的需求 写了个工具类; 有java和js代码 如图 java代码中将坐标系和带宽已作为参数传入方法,使用时只需调用不同方法: js端没有将坐标系和带宽作为参数 如果有需要可以替换注释地方 或者自行修改为传参方式: 接下来贴代码: jav…

C++笔记之如何给 `const char*` 类型变量赋值

C笔记之如何给 const char* 类型变量赋值 code review! 文章目录 C笔记之如何给 const char* 类型变量赋值1.在C中&#xff0c;如果你要给一个 const char* 变量赋值&#xff0c;你通常有几种方法来做这件事&#xff0c;具体取决于你的需求。下面是一些常见的方法&#xff1a;…

使用JAVA发送邮件

这里用java代码编写发送邮件我采用jar包&#xff0c;需要先点击这里下载三个jar包&#xff1a;这三个包分别为&#xff1a;additionnal.jar&#xff1b;activation.jar&#xff1b;mail.jar。这三个包缺一不可&#xff0c;如果少添加或未添加均会报下面这个错误&#xff1a; C…

芯片学习记录SN74HC14DR

SN74HC14DR 芯片介绍 该设备包含六个独立的逆变器使用施密特触发器输入。每个门执行正逻辑中的布尔函数Y/A("/"表示“非”)。 引脚信息 引脚名称I/O电平功能11AI0~vcc输入21YO0~vcc输出7GND-电源14VCC-3.3v电源&#xff08;2~6V&#xff09;Y/A 推荐使用条件 参数…

jwt的使用概念工具类与切入spa项目

jwt的概念 JWT&#xff08;JSON Web Token&#xff09;是一种用于身份验证和授权的开放标准&#xff0c;它是一种轻量级的、安全的、基于JSON的令牌机制。 JWT由三部分组成&#xff1a;头部&#xff08;Header&#xff09;、载荷&#xff08;Payload&#xff09;和签名&#…

C++笔记之std::async的用法

C笔记之std::async的用法 code review! 文章目录 C笔记之std::async的用法1.概念2.C 异步任务的使用示例 - 使用 std::async 和 std::future3. std::launch::async 和 std::launch::deferred 1.概念 std::async 是 C 标准库中的一个函数&#xff0c;用于创建异步任务&#xf…

leetCode 1035.不相交的线 动态规划 + 滚动数组 (最长公共子序列)

1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足满足&#xff1a; nums1[i] nums2[j]…

3.4 构造方法

思维导图&#xff1a; 3.4.1 定义构造方法 ### Java中的构造方法 #### **定义与目的** 构造方法&#xff0c;也称为构造器&#xff0c;是一个特殊的成员方法&#xff0c;用于在实例化对象时为对象赋值或执行初始化操作。其主要目的是确保对象在被创建时具有有效和合适的初始状…

学习记忆——数学篇——代数——记忆宫殿——卧室

明确需放置的大件物品 整式、分式 &#xff08;1&#xff09;整式&#xff1a;运算、因式定理 &#xff08;2&#xff09;分式&#xff1a;运算函数、方程与不等式 &#xff08;1&#xff09;函数&#xff1a;一元二次函数、 &#xff08;2&#xff09;方程&#xff1a;一元二…

Mysql高级——事务(2)

MySQL事务日志 事务有4种特性&#xff1a;原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢&#xff1f; 事务的隔离性由锁机制实现。 而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。 REDO LOG 称为重做日志&#xff0c;…

默认关闭idea2020的注释doc的rendered view模式(阅读模式)

idea2020的javadoc有了一个rendered模式,在开发的时候感觉很不习惯… 打开sessings,在编辑器的外观中取消这个选项,默认情况下doc就是编辑模式了,点击左侧的图标就会变为rendered view模式

输入法显示到语言栏_状态栏

设置–时间和语言–语言–最右侧"相关设置"中的"拼写、键入和键盘设置" 最下方的"高级键盘设置"–“使用桌面语言栏(如果可用)” 点击"语言栏选项" 接下来就是不同输入法的设置了 搜狗输入法:右键输入法选择"隐藏状态栏"–…

全新整合热搜榜单热门榜单内容系统聚合源码/带教程安装

源码简介&#xff1a; 在移动互联网时代&#xff0c;我们每天都会接收到大量的信息&#xff0c;但是想要知道哪些是最热门的话题和内容&#xff0c;往往需要花费很多精力去搜索和筛选。因为有这个需要&#xff0c;一个全新整合热搜榜单热门榜单内容系统聚合源码就应运而生了&a…

Zabbix监控系统详解2:基于Proxy分布式实现Web应用监控及Zabbix 高可用集群的搭建

文章目录 1. zabbix-proxy的分布式监控的概述1.1 分布式监控的主要作用1.2 监控数据流向1.3 构成组件1.3.1 zabbix-server1.3.2 Database1.3.3 zabbix-proxy1.3.4 zabbix-agent1.3.5 web 界面 2. 部署zabbix代理服务器2.1 前置准备2.2 配置 zabbix 的下载源&#xff0c;安装 za…