207Course Schedule 210Course Schedule II

本文介绍了一种高效的拓扑排序算法实现方式,该算法能够快速找出删除某些节点后剩余节点中入度为0的节点,并适用于课程安排问题的场景。通过使用哈希映射和哈希集数组来维护节点的依赖关系和入度值,使得算法可以在常数时间内找到入度为0的节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2道拓扑排序的题目,区别是207只需要判断是否存在,210需要输出结果,其实难度是一样的。

关键在于效率,brute force怎么都可以做出来。

关键在于,我们要能迅速找到 删除某些点后 ,剩下哪些点的入度为0。

不难想到利用集合。

首先从输入数据 获取每个点 被哪些点依赖  比如 1->2 1->3 则 1被2,3依赖(所以后面删除1后,2,3两个点的入度要-1)。

接着我们维护一个全局hashmap,记录当前每个点的入度值。

再维护一个hashset数组,数组的下标就是入度,在这里存储 是当前入度值的 所有点的集合。


于是,我们就只考虑hashset下标为0的项(也就是入度为0的点的集合)。 每次从中随机选一个(这个点入度为0,可以放心删掉,也就是作为210的一个结果点),然后 获取被它所依赖的点。对于每个这样的点,首先从hashmap中查询它的入度,把它从对应hashset中删去,把它添加到 另一个hashset中(入度-1的地方),同时更新它在hashmap中的值。 接着进入下一轮循环,仍然只考虑hashset下标为0的项。


最后如果能选的点的个数 就是原来输入的点的个数,则正确,否则错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值