首页 > 系统相关 >【华为OD】D卷真题100分:内存资源分配 Java代码实现[思路+代码]

【华为OD】D卷真题100分:内存资源分配 Java代码实现[思路+代码]

时间:2024-07-13 14:29:28浏览次数:20  
标签:Java 真题 mem 代码 +---+ 内存 128 true

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客

JS、C、Java、python、C++代码实现:

【华为OD】D卷真题100分:内存资源分配 JavaScript代码实现[思路+代码]-CSDN博客

【华为OD】D卷真题100分:内存资源分配 C语言代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:内存资源分配 Java代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:内存资源分配 python代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:内存资源分配 C++代码实现[思路+代码]-CSDN博客 

题目描述:

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

1、分配的内存要大于等于内存申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用。

2、需要按申请顺序分配,先申请的先分配。

3、有可用内存分配则申请结果为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

备注

     wumu1024                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   +  +   |        +
  |      +    | +      |   +   +----+        |   |          +   +  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   +  +   |        +
  |      +    | +      |   +   +    +        |   |          +   +  +   |        +
  |      +---+ +     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     +     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     +     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     +     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     +     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  |0 |         +         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

题目解析:

        按逻辑来处理即可,做好字符串拆分

代码实现:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Main {

    public static List<Integer> readLine(Scanner input) {
        String str = input.next();
        return Arrays.stream(str.split("[,:]")).map(Integer::parseInt).collect(Collectors.toList());
    }

    public static Boolean alloc(int[][] mem, int value) {
        for (int i = 0; i < mem.length; ++i) {
            if (mem[i][1] > 0 && mem[i][0] >= value) {
                mem[i][1] -= 1;
                return true;
            }
        }

        return false;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Integer> line1 = readLine(input);
        List<Integer> line2 = readLine(input);
        int n = line1.size() / 2;
        int[][] mem = new int[n][2];
        for (int i = 0; i < n; ++i) {
            mem[i][0] = line1.get(i * 2);
            mem[i][1] = line1.get(i * 2 + 1);
        }
        Arrays.sort(mem, Comparator.comparingInt(i -> i[0]));


        StringBuffer buffer = new StringBuffer();
        for (Integer value : line2) {
            buffer.append(alloc(mem, value)).append(",");
        }
        if (buffer.length() > 0) {
            buffer.deleteCharAt(buffer.length() - 1);
            System.out.println(buffer);
        } else {
            System.out.println("");
        }
    }
}

标签:Java,真题,mem,代码,+---+,内存,128,true
From: https://blog.csdn.net/mars1199/article/details/140390586

相关文章

  • JAVA@Transactional常用失效场景
    @Transactional(rollbackFor={RuntimeException.class,Error.class})@Overridepublicbooleancreate(){create1();create2();returntrue;}publicvoidcreate1(){Studentstudent=newStudent();student.setNa......
  • JAVA初级之File文件类
    目录1、概述2、构造方法 3、常用方法3.1获取功能的方法 3.2绝对路径和相对路径 3.3判断功能的方法 3.4创建删除的方法 3.5对目录的遍历4、经典案例4.1查询某个目录下所有的文件。 4.2 找到电脑中所有以avi结尾的电影。1、概述        在......
  • windows使用bat文件 执行java程序
    java开发的程序想在windows上运行。首先要安装对应的java运行环境。然后创建一个 ***.bat文件,写入下面代码,双击它。@echoofftitleLSpbxServercd\d:cd"javaapp\LSpbxServer"java-jarLSpbxServer.jarpausetitleLSpbxServer是这个cmd.exe窗体的标题,同时......
  • 基于Java+Vue的采购管理系统:实现采购业务数字化变革(整套代码)
    前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商符......
  • Java中的Set系列集合超详解
     Set List是有序集合的根接口,Set是无序集合的根接口,无序也就意味着元素不重复。更严格地说,Set集合不包含一对元素e1和e2,使得e1.equals(e2),并且最多一个空元素。  使用Set存储的特点与List相反:元素无序、不可重复。常用的实现方式:HashSet、LinkedHashSet和TreeSet。......
  • JAVA初级之IO流
    目录1、概述1.1什么是IO1.2IO的分类1.3IO的流向说明图解1.4IO流的父类2、字节流2.1字节流概念2.2字节输出流【OutputStream】2.2.1字节输出流的基本方法 2.2.2 FileOutputStream类2.2.3写出字节数据2.2.3数据追加续写 2.2.4写出换行 2.3 字节输入......
  • 2024 辽宁省大学数学建模竞赛B 题 钢铁产品质量优化完整思路 代码 结果分享(仅供学习)
    冷轧带钢是钢铁企业的高附加值产品,其产品质量稳定性对于钢铁企业的经济效益具有非常重要的影响。在实际生产中,冷连轧之后的带钢需要经过连续退火处理来消除因冷轧产生的内应力并提高其机械性能。连续退火的工艺流程如图1所示,一般包括加热、保温、缓冷、快冷、过时效、淬火等......
  • ssycms 常用的文章列表调用代码
    常用的文章列表调用代码最新文章{tag:articleid="val"cid='$itemInfo["cid"]'limit='10'}<ahref="{$val.url}"class="item-link"title="{$val.title}">{$val.title}</a>{/tag:article}热门文......
  • ssycms不常用的文章列表调用代码
    不常用的文章列表调用代码调用指定关键词文章列表{tag:articleid="val"keywords="seo,优化"limit='10'}<ahref="{$val.url}"class="item-link"title="{$val.title}">{$val.title}</a>{/tag:article}调用指定ID文章列表......
  • 学生Java学习路程-2
    ok,到了一周一次的总结时刻,我大致会有下面几个方面的论述:1.这周学习了Java的那些东西2.这周遇到了什么苦难3.未来是否需要改进方法等几个方面阐述我的学习路程。这周主要通过网上找的一些课程来学习java,因为直接看项目它用的语句根本不知道什么意思,简直是一脸懵逼,但因为找的是零基......