内存资源分配

题目描述
有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。

分配规则如下:

分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用;
需要按申请顺序分配,先申请的先分配。
有可用内存分配则申请结果为true,没有可用则返回false。
注意:不考虑内存释放

输入描述
输入为两行字符串

第一行为内存池资源列表,包含内存粒度数据信息,粒度数据间用逗号分割

一个粒度信息内用冒号分割,冒号前为内存粒度大小,冒号后为数量
资源列表不大于1024
每个粒度的数量不大于4096
第二行为申请列表,申请的内存大小间用逗号分割

申请列表不大于100000
如 64:2,128:1,32:4,1:128 50,36,64,128,127

输出描述
输出为内存池分配结果

如true,true,true,false,false

用例1
输入
64:2,128:1,32:4,1:128
50,36,64,128,127
输出
true,true,true,false,false
说明
内存池资源包含:64K共2个、128K共1个、32K共4个、1K共128个的内存资源;

针对50,36,64,128,127的内存申请序列,分配的内存依次是:64,64,128,NULL,NULL,

第三次申请内存时已经将128分配出去,因此输出结果是:

true,true,true,false,false

#如果考虑暴力遍历的话,数量级可能会导致超时
#所以考虑下二分法来降低数量级
def binarysearch(arr,key):
    left = 0
    right = len(arr)-1
    while left<=right:
        mid = (left+right)//2
        midvalue = arr[mid][0]
        if midvalue<key:
            left = mid+1
        elif mid>key:
            right=mid-1
        else:
            return mid
    return left
memories = list(map(lambda x:list(map(int,x.split(':'))),input().split(',')))
applys = list(map(int,filter(lambda x:x!='',input().split(','))))
memories.sort(key=lambda x:x[0])    #按内存大小排序
print(memories)
result=[]  #记录申请结果
for apply in applys:
    ind = binarysearch(memories,apply)
    if ind<len(memories):
        result.append('true')
        memories[ind][1]-=1
        if memories[ind][1]==0:
            memories.pop(ind)
    else:
        result.append('false')
print(','.join(result))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

登录后您可以享受以下权益:

×

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回顶部