Leetcode 每日一题:Course Schedule II

写在前面:

今天我们继续来看一道经典的图论问题,而这个问题可以说是跟我们一众学生的生活息息相关啊!我们每年都有很多需要完成的必修指标,每一个必修指标可能会有一个或多个先修要求,而我们需要决定是否能将这些课全都上一遍,这不就是咱们苦逼大学生每学期选课前的日常嘛!那既然如此,我们就来看看这道与我们生活息息相关的这道算法题吧~~

题目介绍:

题目信息:

题目介绍:

  • 给定一个整数,代表所有需要修的课的总数,所有需要修的课为 0, ...., numCourses - 1
  • 给定一个数组,每一个元素是一个长度为 2 的小数组,每一个小数组的第一个为目标课程,第二个为这个目标课程所需要的先修 (prerequisites)
  • 找出一个可以把全部课上完的组合,返回这个组合
  • 如果不可能都上完,则返回一个空数组

题目想法:

图论转化:

这道题目的关键是在于找到对应关系,而这个对应关系就来源于 prerequisite,也就是先修, 即:a ---> b 一定得先上过 a 才能上 b

这样的话,这道题其实就是一个巨大的单向图的问题,每一个课都是一个节点,而我们可以从任何一个节点开始,只需要找到一个可以不重复的访问所有节点的策略就可以了。同时,这道题目可以允许多个起点,因为对于一些没有任何 prerequisite 的课,在图中表示为游离点,我们也是可以直接上的,所以我们只需要找有连接的点中,有没有内置的循环即可。当且仅当在图中的一个部分存在循环的时候,我们才无法上完所有的课</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值