华为面试算法题

您所在的位置:网站首页 华为面试题目 华为面试算法题

华为面试算法题

2024-03-28 10:43| 来源: 网络整理| 查看: 265

华为面试算法题1

给定一个n*2的二维数组,表示有n个任务,一个信息是任务能够开始做的时间,,另一个信息是任务的结束期限。后者一定大于前者,且数值上都是正数,你作为单线程的人,不能并行处理任务, 但是每个任务都只需要一个单位时间完成 你需耍将所有任务的执行时间,位于开始做的时间和最后期限之间,返回你能否做到这—点。

最重要的是判断任务优先级 如何进行最优调度:

开始时间和结束时间放在一个数组里面进行排序,同时,开始时间带上自己的结束时间,结束时间带上自己的开始时间。开始时间是用来收集任务,结束时间是为了验证这个结束时间的任务有没有做完。同样的开始时间先做最先结束的任务。遍历数组。一旦存在时间差。开始时间相同就将其加入到小根堆中,此时小根堆根据这些开始时间的结束时间排序,最紧迫的任务最先做。当遇到了一个结束时间,小根堆中还存在比结束时间小的结束时间,那么就不能完成所有任务。 #include #include #include #include #include #include using namespace std; struct TimePoint { int time;//时间,开始时间或者结束时间 int end; bool add; //if add== true,任务开始时间,else 任务结束时间。 TimePoint(int t, int e, int a) { time = t; end = e; add = a; } }; bool canDo(vectorjobs) { if (jobs.size() == 0 || jobs.size() == 1) { return true; } int n = jobs.size(); vectorarr(n * 2); //一个任务分成两个事件。 for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3