自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 收藏
  • 关注

原创 naos-riscv (dev.c)源码分析(devtmpfs)

这里是devtmpfs在vfs里面的文件系统id(fsid)。空实现,因为devtmpfs不需要维护inode引用计数,维护open状态,也不需要私有上下文。这里是把假/dev移到真实/dev上。(就是当前系统还不支持。3、把用户程序对/dev/xxx的操作-》转发到真正的device driver。这里是todo,输入设备通常不支持写,这里只是为了让用户写的时候不会死掉。devtmps = 存在于内存里的/dev文件系统 + 设备转发器。2、/dev下的“文件“既可以是普通内存文件,也可以是设备的代理。

2025-12-03 11:08:40 257

原创 naos-riscv(device.h)源码分析

有前面的五个设备操作的函数。还有设备初始化函数,以及根据子类型查找设备,还有根据设备号查找设备。包含name、type、subtype、dev(设备号)、parent(父设备号),ptr设备指针。提供了五个设备操作指针(ioctl、poll、read、write、map)这是设备抽象的一级分类(用于devfs分类,调试显示,设备管理器识别)这是整个设备系统的核心对象,每个设备都会有一个这样的结构体。这里的type+subtype是简单分类和更细的分类。这是设备的二级分类(具体功能分类)

2025-11-28 18:24:18 182

原创 naos-riscv(device.c)源码分析

我们不按照顺序,先来看看这里的安装一个设备节点的函数。(从参数可以看到,有设备的类型,还有子类型,以及ptr指向真实驱动私有数据,name,以及parent,ioctl,poll,read,write,map。write也是,map也是,poll也是。这里可以看到,这里的块设备的ioctl就会被device_ioctl给调用到。这里能看到是一些统一封装层和设备寻找函数、设备初始化函数。这里还注册了设备名。返回第一块设备(minor 0),适合按类别枚举设备。这里是全局设备表和每种设备类型的次设备计数。

2025-11-28 14:33:15 307

原创 naos-riscv(block.h)源码分析

5、max_op_size:单次最大读取能力(底层驱动提供这个数据)。这里blkdev是内核块设备的统一抽象层(因为没有具体的设备操作)。这里是驱动注册时候提供具体的read和write操作函数。这里是一个扇区的大小。通常是512字节,或者是4096字节。这里是IOCTL命令含义(当前很简单)。当前是获取扇区大小和获取设备容量。这里的全局数组+设备数量。简单的理解为设备表。2、有一个void* 的ptr。这个是用来指向驱动真实对象的数据。可以看到这里是块设备的结构体(blkdev_t)

2025-11-28 12:17:43 176

原创 naos-riscv(block.c)源码分析

这里是快速读(完全对齐的读,offset % block_size==0.说明起始点是0、512、1024类似这样的,也就是起点对齐。把非0的条目视作有效。buffer->partition_entry_lba(指表明分区表的起始LBA(通常是2或更大))这里是按照128个条目来进行read。这里是读取偏移512字节处的结构,目的是读取GPT header,GPT header在LBA1(第一个扇区)。卸载块设备(这里的ptr是块设备驱动的私有数据指针)。这里是块设备的ioctl(输入输出控制)接口。

2025-11-23 23:11:46 485

原创 Maven基础精讲:第一篇(从概念到生命周期)

Maven 主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。Maven 项目对象模型(POM)可以通过一小段描述信息来管理项目的构建、报告和文档。当使用 Maven 时,你用一个明确定义的 POM 描述项目,Maven 可以应用共享插件提供的逻辑来完成编译、打包、发布等工作。

2025-09-26 16:32:41 844

原创 Linux基础精讲:第一篇(路径、进程、日志到常用命令)

/../~/cd。

2025-09-26 15:20:11 299

原创 Java基础精讲:第三篇(集合框架到泛型详解

Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排列数组中所有的数据,(删除数据后,要将后面的所有的数据前移动)Collection是集合类的上级接口,子接口有Set、List、LinkedList、ArrayList、Vector、Stack等。Collections是集合类的工具类,包含各种静态方法用于集合的搜索、排序、线程安全化等操作,不能实例化。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。

2025-09-26 14:19:54 386

原创 Java基础精讲:第二篇(装箱拆箱到String优化)

/ false (不同对象)System.out.println(s1.equals(s2));// true (内容相等)如果两个对象相等(equals() 返回 true),它们的 hashCode() 必须相等。// false (新对象)// true (缓存池)性能 最慢(频繁创建对象) 较快(适用于多线程场景) 最快(适用于单线程场景)如果两个对象 hashCode() 相等,它们不一定相等(可能发生哈希冲突)if (“OK”.equals(status)) { …

2025-09-26 13:36:41 653

原创 高性能数据库连接池 HikariCP 实战指南(Spring Boot 项目必用)

每次执行 SQL 前都要“建立连接 → 认证 → 执行 → 关闭连接”,这个过程非常耗时(TCP 握手、身份验证等)。数据库连接池✅ 需要时从池中取✅ 用完后归还给池❌ 不再频繁创建和销毁连接从而大幅提升性能!项目内容🌟 核心价值提升数据库访问性能,降低延迟✅ 是否默认Spring Boot 2+ 默认连接池🔧 是否复杂配置简单,开箱即用📈 适用场景所有基于 JDBC 的 Java 项目(尤其是高并发系统)🚫 不适用场景极低频访问的小工具(可用简易池或直连)📣。

2025-09-25 19:21:11 940

原创 Java基础精讲:第一篇(语言特点到instanceof)

提供庞大的标准库(如java.util、java.io、java.net),提升开发效率。内置对多线程的支持(Thread类和Runnable接口),能有效利用CPU资源,适用于高并发场景(如Web服务、后台任务)。instanceof是Java中的一个双目运算符,也叫类型比较运算符,用于判断某个对象是否属于指定类、子类或接口的实例。⚠️ 注:boolean在JVM中没有专用指令,通常用int表示(占4字节),数组中以byte存储(1字节)。

2025-09-25 13:55:29 740

原创 Java面试八股文第一弹

数组对象也是一个引用对象,将一个数组赋值给另 一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。命名规则:(硬性要求)标识符可以包含英文字母,0-9的数字,$以及_标识符不能以数字开头标识符不是关键字(记一个典型错误2b,不但不道德,而且不符合规则)。标识符的含义: 是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等等,都是标识符。对象,再任何引用使用前,必须为其指定一个对象,否则会报错。的对象,或者是其直接或间接子类,或者是其接口的实现类,结果。

2025-09-25 13:51:50 397

原创 Java开发环境配置(Mac版)

这里选择dmg来进行下载.笔者是老mac是intel系列的(选择x64)3.笔者这里有工具.可以看到是成功了.(借助tab,自动补全来看看。下载完成后双击进行安装,不断下一步.(人家会自己找合适的位置)2.查看是否有.bash_profile文件,有就跳过3。选中macOS,然后选择你要的版本(笔者需要21)1.下载JDK安装包,选择MacOs对应的版本.这里是验证一下(看看我们写的值进去没)官方下载链接:(这里是oracle)4.打开文件(使用你爱的编辑器)这里可以看到.安装成功了.

2025-07-15 22:03:12 514

原创 33.最长等差数列(medium)

回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik <= nums.length - 1。示例 3:输入:nums = [20,1,15,3,10,5,8]输出:4解释:最长的等差子序列是 [20,15,10,5]。回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik。结尾的等差序列的样子。

2025-07-03 22:01:32 858

原创 32.最长的斐波那契子序列的长度(medium)

873. 最长的斐波那契子序列的长度 - 如果序列 x1, x2, ..., x2 满足下列条件,就说它是 斐波那契式 的: * n >= 3 * 对于所有 i + 2 <= n,都有 xi + xi+1 == xi+2给定一个 严格递增 的正整数数组形成序列 arr ,找到 arr 中最长的斐波那契式的子序列的长度。示例 2:输入: arr = [1,3,7,11,12,14,18]输出: 3解释: 最长的斐波那契式子序列有 [1,11,12]、[3,11,14] 以及 [7,11,18]。

2025-07-02 22:55:46 777

原创 Tinyc编译器(翻译)

`VT_JMP`、`VT_JMPI`:表示值是条件跳转的结果。- `VT_LVAL_BYTE`、`VT_LVAL_SHORT`、`VT_LVAL_UNSIGNED`:若 lvalue 是整数类型,这些标志提供其真实类型。- `VT_LLOCAL`:栈上保存的 lvalue,必须与 `VT_LVAL` 一起设置。- **计算型 goto**:`&&label` 返回指向 goto 标签 label 的 void * 指针,`goto *expr` 可跳转到 expr 结果的指针。

2025-07-01 22:59:37 770

原创 31.最长定差子序列(medium)

示例 1:输入:arr = [1,2,3,4], difference = 1输出:4解释:最长的等差子序列是 [1,2,3,4]。示例 2:输入:arr = [1,3,5,7], difference = 1输出:1解释:最长的等差子序列是任意单个元素。示例 3:输入:arr = [1,5,7,8,5,3,4,2,1], difference = -2输出:4解释:最长的等差子序列是 [7,5,3,1]。输入:arr = [1,5,7,8,5,3,4,2,1], difference = -2。

2025-07-01 22:34:25 983

原创 30.最长对数链(medium)

给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti] 且 lefti < righti。现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。最长的数对链是 [1,2] -> [4,5] -> [7,8]。输入:pairs = [[1,2], [2,3], [3,4]]​。输入:pairs = [[1,2],[7,8],[4,5]]​。位置为结尾的最长数对链。

2025-07-01 21:12:06 442

原创 29.最长递增子序列的个数(medium)

有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。为结尾的最长递增子序列的「长度」是多少,我怎么知道最长递增子序列的个数呢?给定一个未排序的整数数组 nums , 返回最长递增子序列的个数。最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。在知道每一个位置结尾的最长递增子序列的长度时,我们来看看能否得到。为结尾的最长递增子序列的「个数」。具体操作情况看代码~​。结尾的最长递增序列的长度时,我们已经知道。输入: [1,3,5,4,7]​。

2025-07-01 00:58:18 657

原创 28.摆动序列

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。示例 1:输入:nums = [1,7,4,9,2,5]输出:6解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。,我们可以根据「子序列的构成方式」,进行分类讨论:​。

2025-06-30 21:48:22 901

原创 27.最长递增子序列

示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1 提示: * 1 <= nums.length <= 2500 * -104 <= nums[i] <= 104 进阶: * 你能将算法的时间复杂度降低到 O(n log(n)) 吗?因此,我们仅需找到满足要求的最大的。

2025-06-29 21:17:40 630

原创 26.环绕字符串中唯一的子字符串(medium)

示例 2:输入:s = "cac"输出:2解释:字符串 s 有两个子字符串 ("a", "c") 在 base 中出现。示例 3:输入:s = "zab"输出:6解释:字符串 s 有六个子字符串 ("z", "a", "b", "za", "ab", and "zab") 在 base 中出现。解释:字符串 s 有六个子字符串 ("z", "a", "b", "za", "ab", and "zab") 在 base 中出现。解释:字符串 s 有两个子字符串 ("a", "c") 在 base 中出现。

2025-06-29 19:59:12 1191

原创 25.单词拆分(medium)

示例 3:输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]输出: false 提示: * 1 <= s.length <= 300 * 1 <= wordDict.length <= 1000 * 1 <= wordDict[i].length <= 20 * s 和 wordDict[i] 仅由小写英文字母组成 * wordDict 中的所有字符串 互不相同。区间内的字符串,能否被字典中的单词拼接而成。

2025-06-29 18:36:07 824

原创 24. 最长湍流子数组

示例 1:输入:arr = [9,4,2,10,7,8,8,1,9]输出:5解释:arr[1] > arr[2] < arr[3] > arr[4] < arr[5]示例 2:输入:arr = [4,8,12,16]输出:2示例 3:输入:arr = [100]输出:1 提示: * 1 <= arr.length <= 4 * 104 * 0 <= arr[i] <= 109。若 i <= k < j :当 k 为奇数时, A[k] > A[k+1],且 当 k 为偶数时,A[k] < A[k+1];

2025-06-29 17:39:14 543

原创 23.等差数列划分(medium)

例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。输入:nums = [1,2,3,4]​。

2025-06-28 19:44:01 1040

原创 22.乘积为正数的最长子数组(medium)

表示「所有以 i 结尾的子数组,乘积为正数的最长子数组的长度」。乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3]。最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6。为正数的最长子数组」,还需要一个「乘积为负数的最长子数组」。结尾的所有子数组中,乘积为「正数」的最长子数组的长度;结尾的所有子数组中,乘积为「负数」的最长子数组的长度。输入:nums = [0,1,-2,-3,-4]​。输入:nums = [-1,-2,-3,0,1]​。为结尾的乘积为负数的最长子数组的长度,加上。

2025-06-28 18:43:28 788

原创 第二章:页表

kvmmap(kernel/vm.c:118)调用mappages(kernel.vm.c:149),它将指定范围的虚拟地址映射到一段物理地址.它将范围内地址分割成页(忽略页数),每次映射一页的起始地址.杜宇每个要映射的虚拟地址(页的起始地址),mapages调用walk找到该地址的最后一级PTE的地址.然后,它配置PTE,使其保持相关的物理页号,所需的权限(PTE_W,PTE_X,PTE_R),以及来标记PTE为有效(kernel/vm.c:161).这些对kfree的调用给了他一些内存管理.

2025-06-09 21:40:21 992

原创 1.操作系统组织

每个进程都有一个执行线程(简称线程),执行进程的指令.一个线程可以被暂停,然后再恢复.为了再进程之间透明地切换,内核会暂停当前运行的线程,并恢复另一个进程的线程.线程的大部分状态(局部变量,函数调用返回地址)都存储在线程的栈中.每个线程有两个栈:用户栈和内核栈(p->kstack).当进程在执行用户指令时,只有它的用户栈在被使用,而它的内核栈是空的.当进程进入内核时(因为系统调用或中断),内核代码在进程的内核栈上交替执行;例如,即使进程的数量多于硬件cpu的数量,操作系统也必须保证所有的进程都有机会执行。

2025-06-09 18:12:17 471

原创 21.乘积最大子数组

这里的推导比较绕,因为不断的出现「正数和负数」的分情况讨论,我们只需根据下面的规则,严。乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3]。表示「所有以 i 结尾的子数组,乘积为正数的最长子数组的长度」。最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6。为正数的最长子数组」,还需要一个「乘积为负数的最长子数组」。结尾的所有子数组中,乘积为「负数」的最长子数组的长度。输入:nums = [0,1,-2,-3,-4]​。输入:nums = [-1,-2,-3,0,1]​。

2025-06-08 19:42:04 502

原创 0.操作系统接口

从同一个原初文件描述符通过一系列fork和dup调用产生的文件描述符都共享同一个文件偏移,而其他情况下产生的文件描述符就不是这样的了,即使它们打开的都是同一个文件。管道右端可能也是一个带有管道的指令,如a|b|c,它fork两个新进程(一个b,一个,c),因此,shell可能要创建一个进程树。它的实现在第7850行。在这段代码的结尾,绑定在文件描述符1的文件有数据“hello world”,父进程的write会从子进程write结束的地方继续写(因为wait,父进程只在子进程结束之后才运行write)。

2025-06-07 21:37:33 607

原创 20.环形子数组的最大和(medium)

示例 1:输入:nums = [1,-2,3,-2]输出:3解释:从子数组 [3] 得到最大和 3示例 2:输入:nums = [5,-3,5]输出:10解释:从子数组 [5,5] 得到最大和 5 + 5 = 10示例 3:输入:nums = [3,-2,2,-3]输出:3解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3 提示: * n == nums.length * 1 <= n <= 3 * 104 * -3 * 104 <= nums[i] <= 3 * 104。

2025-06-07 17:38:30 683

原创 19.最大子数组和(medium)

示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23 提示: * 1 <= nums.length <= 105 * -104 <= nums[i] <= 104 进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。连续子数组 [4,-1,2,1] 的和最大,为 6。

2025-06-07 16:40:41 734

原创 18.买卖股票的最佳时机Ⅳ(hard)

在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能。上述两种情况,我们需要的是「最大值」,因此 f 的状态转移方程为:​。天的时候,手里「没有股票」,并且交易了。

2025-06-07 15:36:20 937

原创 17.买卖股票的最佳时机Ⅲ(hard)

你最多可以完成 两笔 交易。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。示例 2:输入:prices = [1,2,3,4,5]输出:4解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。输入:prices = [3,3,5,0,0,3,1,4]​。

2025-06-06 23:48:06 996

原创 16.买卖股票的最佳时期含手续费(medium)

714. 买卖股票的最佳时机含手续费 - 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格;注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。我们选择在「卖出」的时候,支付这个手续费,那么在「买入」的时候,就不用再考虑手续费的问题。输入:prices = [1, 3, 2, 8, 4, 9], fee = 2​。输入:prices = [1,3,7,5,10,3], fee = 3​。天结束后,处于「卖出」状态,此时的最大利润。

2025-06-01 17:20:17 869

原创 15.买卖股票的最佳时机包含冷冻期

设计一个算法计算出最大利润。处于「买入」状态的时候,我们现在有股票,此时不能买股票,只能继续持有股票,或者卖。对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]​示例 2:​。天的时候,手上没有股票,也不在冷冻期,但是依旧啥也不干到第。根据「状态表示」,我们要三个表一起填,每一个表「从左往右」。:此时要想处于「买入」状态,必须把第一天的股票买了,因此。天结束后,处于「可交易」状态,此时的最大利润;天结束后,处于「冷冻期」状态,此时的最大利润。天结束后,处于「买入」状态,此时的最大利润;

2025-05-28 18:30:07 528

原创 14.粉刷房子(medium)

LCR 091. 粉刷房子 - 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。示例 1:输入: costs = [[17,2,17],[16,16,5],[14,3,19]]输出: 10解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。

2025-05-28 15:07:44 606

原创 13.删除并获得点数(medium)

示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。示例 2:输入:nums = [2,2,3,3,3,4]输出:9解释:删除 3 获得 3 个点数,接着要删除两个 2 和 4。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 4 获得 4 个点数,因此 3 也被删除。输入:nums = [2,2,3,3,3,4]​。输入:nums = [3,4,2]​。

2025-05-28 14:32:24 828

原创 12.打家劫舍Ⅱ(medium)

示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 2:输入:nums = [1,2,3,1]输出:4解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。上一个问题是一个「单排」的模式,这一个问题是一个「环形」的模式,也就是首尾是相连的。偷第一个房屋时的最大金额。

2025-05-28 11:31:01 815

原创 11.按摩师(easy)

注意:本题相对原题稍作改动 示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。示例 3:输入: [2,1,4,5,3,1,1,3]输出: 12解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。输入: [2,7,9,3,1]​。

2025-05-28 10:39:05 739

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除