算法课第十八周作业 | Course Schedule II

写在前面:

下周要考试了,紧张!赶紧复习一下考试要点。选取题目210,是第四周做的那道的升级版,练练手。


题意解读:

给定numCourses个课程以及课程的学习次序对集合,【0,1】代表需先学完1再学习0.

求输出正确的学习顺序,如果不能学完所有课程,则输出空集合。


解题思路:

将每个课程视为一个点,学习顺序变成点与点之间点有向边。

如果这些课程存在环,则不能学完。如果不存在环,则能学完。

回归一下图论的内容,存在环的特点是环内所有点的入度(其他点指向这个点的数量)都不为0.

本次要求数据课程的学习次序,也即是输出有向无环图的拓扑排序。

主要思路是先用inLine记录所有点的入度数,用map记录各个点指向的点。

每次处理当前inLine为0的点(不需要先学其他课程的课程),

用pStack记录课程顺序,将处理的点压栈,删除这个点——inLine标记为-1,将其指向的点入度减1.

循环再处理入度为0的点。。。。一直到找不到入度为0的点。

这时候需要判断两种情况:所有点都处理过了、inLine都是-1,pStack就是所得答案;

另一种是存在环,存在不等于-1的点,则需清空pStack再return。


代码:

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
        inLine.resize(numCourses);

		for(int i = 0; i < numCourses; i++) inLine[i] = 0;

		//pStack.resize(numCourses);
		map.resize(numCourses);

		for(int i = 0; i < prerequisites.size(); i++)
		{
			map[prerequisites[i].second].push_back(prerequisites[i].first);
			inLine[prerequisites[i].first] +=1;
		}
		
		for(int i = 0; i < inLine.size();)
		{
			if(inLine[i] == 0)
			{
				pStack.push_back(i);
				for(int j=0; j<map[i].size(); j++)
				{
					inLine[map[i][j]] -=1;
				}
				inLine[i] = -1;
				i = 0;
			}
			else
				i+=1;
		}
		for(int i = 0; i < inLine.size();i++) if(inLine[i] != -1){pStack.clear(); break;} 
		return pStack;
    }
private:
	vector<int> inLine;
	vector<int> pStack;
	vector<vector<int>> map;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人工智能EasyDL算法是百度推出的一种基于深度学习技术的算法平台,可为用户提供图像识别、目标检测、语音合成等功能。在结作业中,我们可以利用人工智能EasyDL算法完成以下任务。 首先,我们可以利用EasyDL进行图像识别任务。通过上传一系列标注好的图像,我们可以训练出一个图像识别模型,该模型可以识别出新的未标注图像中的物体或场景。例如,我们可以训练一个猫狗分类器,用来识别图像中的猫和狗。 其次,我们可以使用EasyDL进行目标检测任务。通过上传一系列标注好的图像,并标记出图像中的物体位置,我们可以训练出一个目标检测模型。该模型可以检测新的未标注图像中的目标物体,并标记出它们的位置和类别。例如,我们可以用EasyDL训练一个车辆检测器,用于检测交通摄像头捕捉到的车辆。 此外,在结作业中,我们还可以使用EasyDL进行语音合成任务。通过上传训练数据集,包括文字和对应的语音文件,我们可以训练出一个文本到语音的模型。该模型可以将输入的文字转化为自然流畅的语音。例如,我们可以训练一个英文朗读模型,用于将输入的英文文本转化为语音。 总之,通过使用人工智能EasyDL算法,我们可以完成图像识别、目标检测和语音合成等任务。这些任务在各个领域中都有广泛的应用,帮助我们解决实际问题,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值