华为OD机试真题C卷-篇2

news/2024/7/20 19:49:32 标签: 华为od, 算法刷题, python

文章目录

  • 启动多任务排序

启动多任务排序

  • A任务依赖B任务,执行时需要先执行B任务,完成后才可以执行A任务;
  • 若一个任务不依赖其他任务,则可以立即执行,多个同时执行的任务按照字母顺序A-Z排序;
  • 若B依赖A,C依赖A,D依赖B、C、E,则任务执行顺序为A、E、B、C、D;AE是同时执行且按照字母顺序;
    输入描述:
    多个任务的依赖关系;如A->B A依赖B,多组依赖关系用空格隔开
    输出描述:
    任务执行顺序,多个任务用空格隔开

示例1
输入:
A->B C->B
输出:
B A C

示例2
输入:
B->A C->A D->B D->C D->E
输出:
A E B C D

示例3
输入:
B->A E->A D->A E->D C->B F->B
输出:
A B D C E F

思路:

  • 迭代处理依赖关系列表,当没有依赖关系时(列表为空),所有的任务可以同时执行,只需按照字母顺序排序即可;
  • 每个依赖关系字符串使用 ‘->’ 分割出主动依赖的任务,被依赖的任务
    • 主动依赖的任务放入一个集合depending_tasks;
    • 被动依赖的任务放入一个集合depended_tasks;
    • 两个集合的并集为所有的任务(all_tasks 集合);
    • 两个集合的差集(depended_tasks - depending_tasks)为独立的任务,独立的任务可以立即执行,并按照字母顺序排序;
  • 将可以立即执行的任务排序后放入task_run_order列表,并重新过滤依赖关系列表(若依赖的任务已经执行,则删除该依赖关系)
  • 继续迭代处理剩余的依赖关系列表,直至其为空,此时剩余的任务(all_tasks - task_run_order)不再有依赖关系,可以同时执行,并按照字母顺序排序即可,最后加入task_run_order列表。
  • 返回task_run_order
python"># __author__ = "laufing"
from typing import List


class SortTask:
    def solution(self, dependent_relations: List[str]):
        # 迭代
        task_run_order = []
        # 所有的任务
        all_tasks = set()

        while dependent_relations:
            # 主动依赖其他任务的任务
            depending_tasks = set()
            # 被依赖的任务
            depended_tasks = set()
            for relation in dependent_relations:
                # 任务分割 前者主动依赖  后者被动依赖
                task_a, task_b = relation.split("->")

                if task_a not in depending_tasks:
                    depending_tasks.add(task_a)
                if task_b not in depended_tasks:
                    depended_tasks.add(task_b)

            print("depending:", depending_tasks)
            print("depended:", depended_tasks)
            if not all_tasks:
                all_tasks = depending_tasks | depended_tasks

            # 获取不依赖其他任务的 任务(独立的)
            # 独立的任务可以立即执行(注意按字母顺序排序)
            independent_tasks = depended_tasks - depending_tasks
            task_run_order.extend(sorted(list(independent_tasks)))
            dependent_relations = list(filter(lambda i: i[-1] not in task_run_order, dependent_relations))

        # 依赖关系解决完后,执行剩余的任务
        task_run_order.extend(sorted(list(all_tasks - set(task_run_order))))

        return task_run_order


if __name__ == '__main__':
    sort_task = SortTask()
    while True:
        try:
            # 输入
            lay_relations = input("lay:").strip().split()
            print("origin relations:", lay_relations)
            # 解决方案
            result = sort_task.solution(lay_relations)
            # 输出结果
            print(" ".join(result))
        except KeyboardInterrupt:
            break

 


http://www.niftyadmin.cn/n/5357056.html

相关文章

swift - reduce简介

reduce 减少&#xff0c;降低&#xff1b;&#xff08;烹调中&#xff09;使变浓稠&#xff0c;收汁&#xff1b;<美>节食减肥&#xff1b;使沦为&#xff0c;使陷入&#xff08;不好的境地&#xff09;&#xff1b;迫使&#xff0c;使不得不&#xff08;做&#xff09;&…

两个近期的计算机领域国际学术会议(软件工程、计算机安全):欢迎投稿

近期&#xff0c;受邀担任两个国际学术会议的Special session共同主席及程序委员会成员&#xff08;TPC member&#xff09;&#xff0c;欢迎广大学界同行踊跃投稿&#xff0c;分享最新研究成果。期待这个夏天能够在夏威夷檀香山或者加利福尼亚圣荷西与各位学者深入交流。 SERA…

高频一体式读写器的应用及其原理

高频一体式读写器作为一款读写设备&#xff0c;将RFID读写模块和天线集于一体&#xff0c;通过天线与RFID标签进行无线通信&#xff0c;实现对标签的识别和内存数据的读出或写入操作。具备安全、准确、快速、扩展、兼容性强等特点&#xff0c;具备非接触识别、远距离识别、环境…

【2024程序员必看】鸿蒙应用开发行业分析

鸿蒙操作系统沉浸四年&#xff0c;这次终于迎来了破局的机会&#xff0c;自从2023年华为秋季发布会上宣布鸿蒙 Next操作系统不在兼容Android后&#xff0c;就有不少大厂开始陆续与华为达成了鸿蒙原生应用的开发合作&#xff0c;据1月18日华为官方宣布110多天的产业合力“突进”…

一分钟教程系类之物品抠图方法分享

随着电商行业的不断发展&#xff0c;电商小伙伴们在日常工作中经常需要抠图&#xff0c;尤其是物品抠图。对于一些刚刚入职的小白来说&#xff0c;可能会觉得抠图是一项相当困难的任务&#xff0c;但其实只要掌握了正确的方法&#xff0c;抠图也可以变得轻松简单。下面&#xf…

【Spring连载】使用Spring Data访问Redis(四)----RedisTemplate

【Spring连载】使用Spring Data访问Redis&#xff08;四&#xff09;----RedisTemplate通过RedisTemplate处理对象Working with Objects through RedisTemplate 一、专注String的便利类二、Serializers 大多数用户可能使用RedisTemplate及其相应的包org.springframework.data.r…

TI AM5708工业派

文章目录 一、TI AM5708工业派简介二、主要使用的功能三、J12 扩展接口四、NFS代码实现总结 一、TI AM5708工业派简介 TI AM5708工业派是基于美国德州仪器&#xff08;TI&#xff09;的AM5708处理器所开发的智能硬件工业派&#xff0c;主要面向工业生产、图像处理、智能人机交…

笔记--扩展欧几里得算法

AcWing.877.欧几里得算法 给定 n n n 对正整数 a a ai, b b bi&#xff0c;对于每对数&#xff0c;求出一组 x x xi, y y yi&#xff0c;使其满足 a a ai x x xi b b bi y y yi g c d ( a gcd(a gcd(ai , b ,b ,bi ) ) )。 输入格式 第一行包含整数 n n n。 接下来 …