OJ练习第145题——并行课程 III

news2024/10/1 3:25:28

力扣链接:2050. 并行课程 III

题目描述

给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 relations[j] = [prevCoursej, nextCoursej] ,表示课程 prevCoursej 必须在课程 nextCoursej 之前 完成(先修课的关系)。同时给你一个下标从 0 开始的整数数组 time ,其中 time[i] 表示完成第 (i+1) 门课程需要花费的 月份 数。

请你根据以下规则算出完成所有课程所需要的 最少 月份数:

如果一门课的所有先修课都已经完成,你可以在 任意 时间开始这门课程。
你可以 同时 上 任意门课程 。
请你返回完成所有课程所需要的 最少 月份数。

注意:测试数据保证一定可以完成所有课程(也就是先修课的关系构成一个有向无环图)。

示例

在这里插入图片描述
在这里插入图片描述

Java代码1(记忆化搜索)

在这里插入图片描述

class Solution {
    public int minimumTime(int n, int[][] relations, int[] time) {
        int max = 0;
        List<Integer>[] prev = new List[n + 1];
        for(int i = 0; i <= n; i++) {
            prev[i] = new ArrayList<Integer>();
        }
        for(int[] relation : relations) {
            int x = relation[0], y = relation[1];
            prev[y].add(x);
        }
        Map<Integer, Integer> memo = new HashMap<Integer, Integer>();
        for(int i = 1; i <= n; i++) {
            max = Math.max(max, dp(i, time, prev, memo));
        }
        return max;
    }

    public int dp(int i, int[] time, List<Integer>[] prev, Map<Integer, Integer> memo) {
        if(!memo.containsKey(i)) {
            int cur = 0;
            for(int p : prev[i]) {
                cur = Math.max(cur, dp(p, time, prev, memo));
            }
            cur += time[i - 1];
            memo.put(i, cur);
        }
        return memo.get(i);
    }
}

Java代码2(拓扑排序)

class Solution {
    public int minimumTime(int n, int[][] relations, int[] time) {
        List<Integer>[] m = new List[n];
        int[] in = new int[n];
        for (int[] r : relations) {
            int pre = r[0] - 1;
            int next = r[1] - 1;
            if (m[pre] == null) {
                m[pre] = new ArrayList();
            }
            m[pre].add(next);
            in[next]++;
        }
        Queue<Integer> q = new ArrayDeque();
        for (int i = 0; i < n; i++) {
            if (in[i] == 0) {
                q.offer(i);
            }
        }
        int[] times = new int[n];
        int ans = 0;
        while (!q.isEmpty()) {
            int pre = q.poll();
            times[pre] += time[pre];
            ans = Math.max(ans, times[pre]);
            if (m[pre] == null) {
                continue;
            }
            for (int next : m[pre]) {
                times[next] = Math.max(times[pre], times[next]);
                in[next]--;
                if (in[next] == 0) {
                    q.offer(next);
                }
            }
        }
        return ans;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/parallel-courses-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/807460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何高效书写文章访问

一、了解CSDN CSDN&#xff08;CSDN博客&#xff09;是中国最大的IT技术社区和程序员学习平台之一。CSDN成立于1999年&#xff0c;是中国软件开发者网络的缩写&#xff0c;旨在为中国的软件开发者和IT技术爱好者提供学习、交流和分享的平台。以下是关于CSDN的一些介绍&#xff…

1.写uni-app推荐的工具 HBuilderX

ni-app是一个框架&#xff0c;最大的优点是适用性强。你用这个框架写一套代码&#xff0c;他就能转换为各种小程序(微信&#xff0c;支付宝)&#xff0c;App&#xff0c;PC的web的样子 对于目前&#xff08;20230723&#xff09;来讲&#xff0c;在跨端的时候极容易报错。比如…

Ubuntu Server版 之 共享文件 samba和NFS 两种方法

NFS 和 Samba NFS &#xff1a; linux之间资源共享 Samba&#xff1a; 是windows系统与Linux系统之间资源共享的 samba 安装samba 工具 sudo apt install samba 创建共享目录 sudo mkdir /home/shared sudo chmod 777 /home/shared 配置sambd sudo vim /etc/samba/smb.con…

MySQL 实现分库和分表的备份 2023.7.29

1、分库备份 [rootlocalhost mysql-backup]# cat db_bak.sh #!/bin/bash k_userroot bak_password123456 bak_path/root/mysql-backup/ bak_cmd"-u$bak_user -p$bak_password" exc_db"Database|information_schema|mysql|performance_schema|sys" dbname…

SQL-每日一题【1068. 产品销售分析 I】

题目 销售表 Sales&#xff1a; 产品表 Product&#xff1a; 写一条SQL 查询语句获取 Sales 表中所有产品对应的 产品名称 product_name 以及该产品的所有 售卖年份 year 和 价格 price 。 查询结果中的顺序无特定要求。 查询结果格式示例如下&#xff1a; 解题思路 1.题目要…

Go-高质量编程与性能调优

高质量编程&#xff1a; 什么是高质量&#xff1a; ​ ——编写代码能达到正确可靠&#xff0c;简洁清晰的目标 各种边界条件是否考虑完备 异常情况处理&#xff0c;稳定性保证 易读易维护 编程原则 简单性 消除“多余的复杂性”&#xff0c;以简单清晰的逻辑编写代码 不理解…

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…

带宽管理:知识点概述及防火墙带宽管理实验

目录 一、带宽管理技术介绍 1.1 基本概念&#xff1a; 1.2 带宽管理原理介绍&#xff1a; 1.3 接口带宽原理&#xff1a; 1.4 带宽策略原理&#xff1a; 1.5 带宽通道原理 1.6 带宽复用 二、带宽管理实验 一、带宽管理技术介绍 1.1 基本概念&#xff1a; 带宽管理对通…

hMailServer-5.3.3-B1879.exe

hMailServer-5.3.3-B1879.exe

【转】数据治理简介

原文链接&#xff1a;数据治理怎么做&#xff1f;这篇万字长文终于讲清楚了&#xff01; - 知乎 引言&#xff1a; 股份制改革对我国银行业来说只是一个开始&#xff0c;企业在风险管理、创造价值等方面还有很长的路要走。 风险管理要求提供精准的数据模型、创造价值要求充分…

动态线程池问题的解决

项目中需要将线程池也监控管理起来。 于是决定引入了hippo4j&#xff0c;这个引入很简单&#xff0c;官方的例子也很简单&#xff0c;拿过来直接跑。 出现问题了&#xff0c;用的和例子一模一样的&#xff0c;也没什么错&#xff0c;但是就是在服务器的管理控制台上没有找到动态…

深入浅出指南:Netty开发【NIO核心组件】

目录 ​Netty开发【NIO核心组件】 1.NIO基础概念 2.NIO核心组件 2.1.Channel&&Buffer简介 2.2.Selector 服务器的多线程版本 服务器的线程池版本 服务器的selector版本 2.3.Buffer 0.ByteBuffer的正确使用流程 1.ByteBuffer类型简介 2.ByteBuffer核心属性说…

【Docker】Docker应用部署之Docker容器安装Redis

目录 一、搜索Redis镜像 二、拉取Redis镜像 三、创建容器 四、测试使用 一、搜索Redis镜像 docker search redis 二、拉取Redis镜像 docker pull redis:版本号 # 拉取对应版本的redis镜像 eg: docker pull redis:5.0 三、创建容器 docker run -id --nameredis -p 6379:637…

23款奔驰GLS450加装原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶&#xff0c;可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出&#xff0c;并且在关闭后能够立刻散去。车内气味不会永久改变&#xff0c;香氛…

【HDFS】Block、BlockInfo、BlockInfoContiguous、BlockInfoStriped的分析记录

本文主要介绍如下内容: 关于几个Block类之间的继承、实现关系;针对文章标题中的每个类,细化到每个成员去注释分析列出、并详细分析BlockInfo抽象类提供的抽象方法、非抽象方法的功能针对几个跟块组织结构的方法再进行分析。moveBlockToHead、listInsert、listRemove等。一、…

基于STM32设计的门禁照相机

一、项目介绍 当前文章介绍基于STM32设计的门禁照相机&#xff0c;本项目提供了一种更加智能、安全、便捷的门禁解决方案。门禁照相机采用STM32F103ZET6 MCU作为主控芯片&#xff0c;配合2.8寸LCD显示屏、OV7725数字摄像头、SD卡和模拟门铃按键等外设模块&#xff0c;实现了摄…

Pandas进阶修炼120题-第三期(金融数据处理,51-80题)

目录 往期内容&#xff1a;第一期&#xff1a;Pandas基础&#xff08;1-20题&#xff09;第二期&#xff1a;Pandas数据处理&#xff08;21-50题&#xff09; 第三期 金融数据处理51.使用绝对路径读取本地Excel数据方法一&#xff1a;双反斜杠绝对路径方法二&#xff1a;r 拓展…

记录--你不知道的Js高级方法

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在Js中有一些比较冷门但是非常好用的方法&#xff0c;我在这里称之为高级方法&#xff0c;这些方法没有被广泛使用或多或少是因为存在一些兼容性的问题&#xff0c;不是所有的浏览器都读得懂的。…

Java特殊时间格式转化

平常开发过程当中&#xff0c;我们可能会见到有的日期格式是这样的。 1、2022-12-21T12:20:1608:00 2、2022-12-21T12:20:16.0000800 3、2022-12-21T12:20:16.00008:00下面来说一下这种时间格式怎么转换 第一种&#xff1a;2022-12-21T12:20:1608:00 代码如下&#xff1a; p…

Android ANR触发机制之Service ANR

一、前言 在Service组件StartService()方式启动流程分析文章中&#xff0c;针对Context#startService()启动Service流程分析了源码&#xff0c;其实关于Service启动还有一个比较重要的点是Service启动的ANR&#xff0c;因为因为线上出现了上百例的"executing service &quo…