华为OD算法开发指导-简易内存池

算法描述

实现一个简易的内存池,根据请求的命令完成内存的申请与释放,内存池支持两种操作命令,locate与release,操作命令描述:

|--------------------------------------------------------------|
| locate命令表示请求分配指定大小的内存块,分配成功,则返回内存块的首地址,分配失败,则返回error。 |
| release命令表示请求释放指定内存块首地址的内存块,释放成功,则返回已释放内存块的大小,释放失败,则返回error。 |

内存块的约束条件:

|-------------------------------------|
| 内存池的总大小为100。 |
| 分配的内存块必须是连续的,并优先从低地址分配。 |
| 内存块释放后可以再次被分配,已释放的内存块在空闲的时候不能被二次释放。 |
| 不会释放已申请的内存块的中间地址。 |
| 释放的操作只针对首地址对应的内存块操作,不影响其他内存块。 |

输入描述

第一行输入为非负整数N,表示命令的个数,接下来输入N行,每行表示一个操作命令,操作命令与参数之间用等号分隔,例如,locate=20,表示申请内存块的大小为20,release=30,表示释放的内存块的首地址是30。

输出描述

命令locate请求分配内存块成功,则返回内存块的首地址,分配失败,则返回error,命令release请求释放内存块成功,则返回已释放内存块的大小,释放失败,则返回error。

测试用例

|--------------------------------------------------------|
| 输入: 3 locate =20 locate =60 release=300 输出: 0 20 error |

算法逻辑分析

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 使用内存索引记录内存的分配,其数据结构是二维数组,二维数组的每个元素表示已申请的内存块,例如,内存索引的二维数组\[0,20,30,10],其中,0,20,0表示内存块的起始地址,20表示已分配的内存块的大小,以此类推。 请求分配内存块的业务逻辑,遍历内存索引的二维数组,判断是否有剩余的内存空间分配,有则分配内存块,在内存索引的二维数组中,插入新分配的索引,更新内存索引的二维数组,返回已分配的内存块的起始地址,没有内存块分配,则返回error。 请求释放内存块的业务逻辑,遍历内存索引的二维数组,判断是否存在对应起始地址的内存块,有则释放对应的内存块,在内存索引的二维数组中,删除对应的内存块,更新内存索引的二维数组,返回已释放的内存块的起始地址,没有对应的内存块,则返回error。 |

Java算法代码

算法主函数:

算法初始化函数:

申请内存块主函数:

释放内存块主函数:

增加申请的内存块到内存索引函数:

从内存索引中删除释放的内存块函数:

算法测试

测试用例:

相关推荐
M-Robots echo4 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~4 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
数模竞赛Paid answer4 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆5 小时前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划
mldong5 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe6 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一516 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
想吃火锅10056 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
gugucoding6 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nil2087 小时前
leetcode 54螺旋矩阵
算法·leetcode·矩阵