华为OD机试E卷 - 内存资源分配(Java & Python& JS & C++ & C )

题目描述

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

分配规则如下:

  • 分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用;
  • 需要按申请顺序分配,先申请的先分配,有可用内存分配则申请结果为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

解题思路

规则总结:

  • 按需分配内存,不能拆分。
  • 优先分配最小的满足条件的内存块。
  • 内存池中的资源一旦分配出去,就无法再次使用。
  • 若没有可用内存块满足需求,返回 false

示例解释:

输入:

64:2,128:1,32:4,1:128
50,36,64,128,127

输出:

true,true,true,false,false
解释过程:
  1. 内存池初始化

    • 内存池资源为:
      • 64K 的内存块有 2 个。
      • 128K 的内存块有 1 个。
      • 32K 的内存块有 4 个。
      • 1K 的内存块有 128 个。
  2. 申请 50K 内存

    • 50K 需要一个大于等于 50K 的内存块。
    • 从内存池中寻找,最小满足要求的内存块是 64K,因此分配一个 64K 的内存块,成功,返回 true
    • 剩余内存池:64:
杨辉三角形是数学中一个非常有趣的排列,它在计算科学中的编程实现同样充满了乐趣和挑战。为了帮助你高效地在不同编程语言中实现这一功能,你可以参考《编程语言实现杨辉三角:JavaC++Python等》这篇资料。下面我将根据这些语言分别解释如何高效打印杨辉三角形的前N行。 参考资源链接:[编程语言实现杨辉三角:JavaC++Python等](https://wenku.youkuaiyun.com/doc/5oq6dru8ny?spm=1055.2569.3001.10343)Java中,你可以创建一个二维数组来存储三角形的每一行,然后使用嵌套循环根据杨辉三角形的性质计算每一行的数值。这里的关键是利用组合数学中的性质:每行第k个数等于第k-1个数(k从1开始计算)与第k个数之和(前一行)。为了打印,只需遍历数组即可。 C++实现可以使用`std::vector`,这是一个非常灵活的容器。你可以初始化一个`vector<vector<int>>`类型的变量,然后逐行添加数据。通过利用`vector`的`push_back`方法可以方便地添加元素并构建三角形。 Python是动态类型的语言,非常适合快速实现算法。你可以使用列表推导式来生成每一行,列表中的每个元素是上一行的两个相邻元素之和,同样利用列表的首尾元素始终为1这一特性。 C语言实现杨辉三角形时需要注意内存管理,可以使用二维数组或者动态分配内存的方式。通常情况下,为了简化问题,可以直接使用二维数组。 C#中可以使用`List<List<int>>`,它是一个嵌套列表结构,非常适合存储三角形的每一行。通过循环和列表操作,你可以很方便地实现和打印三角形。 JavaScript的实现可以利用数组的`map`方法,这是一个非常适合这种场景的高阶函数,可以简化数组中的每个元素的处理。 在PHP中,你可以使用数组来构建杨辉三角形。通过使用循环结构,你可以生成每一行的数组,并逐行打印出来。 总结来说,尽管这些编程语言的语法和特性各有不同,但实现杨辉三角形的基本逻辑是一致的。了解并运用这些基本的逻辑,结合各自语言的特点,可以高效地在任何一种编程语言中实现并打印出不同行数的杨辉三角形。详细实现方法和代码示例请参考《编程语言实现杨辉三角:JavaC++Python等》。 参考资源链接:[编程语言实现杨辉三角:JavaC++Python等](https://wenku.youkuaiyun.com/doc/5oq6dru8ny?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值