目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
- 4、如果改一下呢?
一、题目描述
有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源,返回申请结果成功失败列表。
分配规则如下:
- 分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用;
- 需要按申请顺序分配,先申请的先分配,有可用内存分配则申请结果为true;
- 没有可用则返回false;
注意:不考虑内存释放。
二、输入描述
输入两行字符串。
第一行为内存池资源列表,包含内存粒度数据信息、粒度数据间用逗号分隔,一个粒度信息内用冒号分隔,冒号前为内存粒度大小,冒号后为数量。
资源列表不大于1024,每个粒度数量不大于4096。
第二行为申请列表。
申请的内存大小间用逗号分隔,申请列表不大于100000。
三、输出描述
输出内存池分配结果。
四、解题思路
- 定义一个内存列表,并初始化数据;
- 定义一个申请列表,并初始化数据;
- 分配的内存要大于等于内存的申请量;
- 存在满足需求的内存就必须分配;
- 输出内存池分配结果;
五、Python算法源码
# 内存池资源列表
memorys = input()
# 申请列表
applys = input()
def allocate_memory(memorys, applys):
# 内存列表
memoryList = []
# 内存分配结果
memoryAllocationList = []
# 解析内存池资源列表
memoryInfoList = memorys.split(",")
for info in memoryInfoList :
# 内存粒度大小,内存数量
memory_size, memory_count = info.split(":")
for _ in range(int(memory_count)):
memoryList.append(int(memory_size))
# 申请列表
applyList = []
# 解析申请列表
applyListList = applys.split(",")
for apply_memory in applyListList:
applyList.append(int(apply_memory))
# 内存分配结果
for apply_memory in applyList:
flag = False
for i in range(len(memoryList)):
# 分配的内存要大于等于内存的申请量
if memoryList[i] >= apply_memory:
# 存在满足需求的内存就必须分配
flag = True
memoryList.pop(i)
break
memoryAllocationList.append(flag)
return memoryAllocationList
# 输出内存池分配结果
print(allocate_memory(memorys, applys))
六、效果展示
1、输入
8:1,16:1,32:1,64:1
60,12,24,60
2、输出
true,true,true,false
3、说明
60对应64,即为true;
12对应16,即为true;
24对应32,即为true;
60无可对应的内存,即为false;
4、如果改一下呢?
8:1,16:1,32:1,64:2
60,12,24,60
我猜会输出true,true,true,true,你觉得呢?
快来试试看吧。
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。