
 
目录
- 一、题目描述
 - 二、输入描述
 - 三、输出描述
 - 四、解题思路
 - 五、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在线答疑。




















