360校招编程题:内存管理

2023-10-27

题目描述:
物联网技术的蓬勃发展,各种传感器纷纷出现,小B所在的项目组正在开放一个物联网项目,她们在研究设计一种新的传感器。这种传感器有自己的基本处理单元,具有一定的自主性,能够进行简单的数据收集、处理、存储和传输,为降低系统功耗并保证系统可靠性和可控性,她们要对内存进行基本的管理。研究小组计划开发一个实验性内存管理器,实现对内存的分配、释放和整理。对应的接口为new、del和def,使用语法:
new size:分配size字节大小的内存块,返回该内存的句柄handle,size为正整数;
del handle:释放句柄handle指向的内存块;
def:整理内存碎片,将所有已分配内存块按地址从低到高的顺序迁移,使空闲内存碎片在高地址端拼接在一起;
初始内存为initSize字节大小的整片空闲内存,编号为1到initSize。
new size操作中,若存在小于size的连续空闲内存,按照小地址优先的原则从空闲内存区域中分配size大小的内存块,标记该内存块状态为已分配,并返回指向该内存块的句柄。若无法分配,则返回空(NULL)。
del handle操作释放由handle标记的内存块,标记被释放的内存状态为空闲。若handle为无效句柄,则返回ILLEGAL_OPERARION。
def完成内存整理工作,无返回值。
根据设计,每次成功内存分配返回的句柄为一个正整数,从1开始,依次计数。失败的存储分配操作不影响计数。
项目小组将此项任务分配给小B,小B向你求助,你能帮助她吗?

输入:
输入中有多组测试数据,每组测试数据的第一行为两个正整数T和MaxMem(1<=T<=10000,1<=MaxMem<=10000),其中T为操作次数,MaxMem为初始内存大小,随后有T行操作指令。

输出:
对每组测试数据,按操作顺序输出操作结果。对每个new操作,在单独行中输出结果,成功时输出其返回句柄值,失败则输出NULL,若del操作失败,输出ILLEGAL_OPERATION。def不产生输出。

样例输入:

6 10
new 5
new 3
del 1
new 6
def
new 6

样例输出:

1
2
NULL
3

代码:

import java.util.Scanner;
public class Main {
    static int handle = 0;
    static int sum = 0;//用来计算总内存
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int T = scanner.nextInt();
            int MaxMem = scanner.nextInt();
            scanner.nextLine();
            int[] arr = new int[T + 1];//用来存放句柄
            arr[0] = -2;
            int[] sizeArr = new int[T + 1];//用来存放句柄对应的size
            for (int i = 0; i < T; i++) {
                String str = scanner.nextLine();
                String op = str.split(" ")[0];
                int size = 0;
                if (str.length() > 3) {
                    size = Integer.parseInt(str.split(" ")[1]);
                }
                if (op.equals("new")) {
                    sum += size;
                    if (sum <= MaxMem) {
                        handle++;
                        arr[handle] = size;
                        sizeArr[handle] = size;
                        System.out.println(handle);
                    } else {
                        sum -= size;
                        System.out.println("NULL");
                    }
                } else if (op.equals("del") && arr[size] != -1) {
                    arr[size] = -1;//-1表示删除了该句柄
                } else if (op.equals("del") && arr[size] == -1) {
                    System.out.println("ILLEGAL_OPERATION");
                } else if (op.equals("def")) {
                    for (int j = 0; j < arr.length; j++) {
                        if (arr[j] == -1) {
                            sum -= sizeArr[j];
                        }
                    }
                }
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

360校招编程题:内存管理 的相关文章

随机推荐

  • 通过FXmlFile构建xml时,注意xml规范

    直接说问题 构建xml时 用 FXmlFile dependencyXMLFile new FXmlFile dependencyXML EConstructMethod ConstructFromBuffer 失败 原因时 构建depen
  • Web功能实现(1.展示全部2.模糊查询3.修改用户4.删除用户)

    需求 1 展示全部 2 模糊查询 3 修改用户 4 删除用户 首先写数据库脚本 CREATE DATABASE 32312 IF NOT EXISTS test 40100 DEFAULT CHARACTER SET utf8 USE te
  • Wifi简介

    一 WIFI的基本架构 1 wifi用户空间的程序和库 external wpa supplicant 生成库libwpaclient so和守护进程wpa supplicant 2 hardware libhardware legary
  • 关于Mybatis逆向工程的一些查询操作

    查询所有数据不带参数的可以使用 selectByExampleWithBLOBs example 查询的数据需要按字段的排序的 example setOrderByClause 字段名 ASC 升序排列 desc为降序排列 去除重复的数据
  • GEE学习笔记 五十四:QGIS展示3D的高程数据

    写了一个多月的GEE中文教程文档 想到GEE头就疼 今天就写一篇不是GEE的文章 QGIS作为一个开源的非常好用的本地GIS工具 这里不在赘述 这里说它的一个比较有意思的内容 通过DEM数据展示3D地形 下载DEM 高程数据 比如从官网下载
  • 在Ubuntu 14.04 64bit上安装思维导图工具XMind

    这是一款对个人免费的工具 提供了一些基本功能 如果你需要更多功能 可以付费购买Pro版本 从下面的官网地址下载64bit的deb包 http www xmind net download linux 下面完成后 Ubuntu软件管理中心会自
  • Vue项目引入引入ElementUI

    目录 一 安装ElementUI 二 完整引入elementUI 1 在main js中引入elementUI 2 测试 三 按需引入elementUI 1 安装babel plugin component 2 修改 babelrc 文件
  • 权力的游戏第一季/全集Game of Thrones迅雷下载

    权力的游戏 是一部中世纪史诗奇幻题材的电视连续剧 该剧以美国作家乔治 R R 马丁的奇幻巨作 冰与火之歌 七部曲为基础改编创作 故事背景中虚构的世界 分为两片大陆 位于西面的 日落国度 维斯特洛 位于东面的类似亚欧大陆 维斯特洛大陆边境处发
  • mybatis-plus分页

    ApiOperation value 条件过滤分页查询列表 PostMapping list conditions public ResponseDTO
  • 配置wifi热点_WiFi就像“空气”要覆盖在生活的每个角落

    以高速发展的现代社会来说 热点其实含盖了两种意思 一个是被称作WiFi热点 另一个被称作新闻热点 那么今天所围绕的主题就是WiFi热点 WiFi热点就是将手机接收到的GPRS 3G或4G信号转化为wifi信号发出去的技术 手机必须有无线AP
  • springboot整合mybatis:查询语句,返回null

    springboot整合mybatis时 查询数据库数据时 返回结果为null 刚开始以为是数据库没连接上 结果增 改 删的其他语句则执行成功 但唯有查询语句始终返回null 一条数据一个null 该情况一般情况下是 mapper xml文
  • 深入理解Android之Gradle

    深入理解Android之Gradle 格式更加精美的PDF版请到 https pan baidu com s 1GfN6F8sOaKFAdz5y1bn3VQ下载 weibo分享失效 请各位到百度云盘下载 Gradle是当前非常 劲爆 得构建
  • GitHub上SSH keys和Deploy keys的区别

    平时安装一个git然后去GitHub进行SSH keys 配置最后就开始使用 然后换一台电脑再使用 ssh keygen t rsa C your email 生成一个ssh key 将其添加到自己到github中去 然而发现添加后这台电脑
  • conda安装PaddlePaddle

    最近在学深度学习 但是我打开c盘看见多了 keras之流的东西 又要安飞浆时突然想到conda的默认安装路径 Anaconda Prompt里执行 conda info env 查看已经安装的环境以及位置 进入百度飞浆官网 找到安装教程 W
  • 华为OD机试 - 最佳植树距离(Java & JS & Python)

    题目描述 按照环保公司要求 小明需要在沙化严重的地区进行植树防沙工作 初步目标是种植一条直线的树带 由于有些区域目前不适合种植树木 所以只能在一些可以种植的点来种植树木 在树苗有限的情况下 要达到最佳效果 就要尽量散开种植 不同树苗之间的最
  • 带你了解软件版本号的命名规则

    1 常见软件的版本号命名 软件 升级过程 说明 Linux Kernel 0 0 1 1 0 0 2 6 32 3 0 18 若用 X Y Z 表示 则偶数 Y 表示稳定版本 奇数 Y 表示开发版本 Windows Windows 98 W
  • 是创新还是天真?BlockCity推出BC众创引争议

    三个简陋的主页面 两种推广返佣奖励模式 七个用户身份等级设置 只能围绕BlockCity进行推广 就这样一个用于营销传播的返佣平台 或者说加强版的自营淘宝客平台 居然被自吹自擂地冠以 创业元宇宙 的名义 这就是BlockCity 区块城市
  • MicroBlaze系列教程(9):xilisf串行Flash驱动库的使用

    文章目录 1 xilisf库简介 2 xilisf库函数 3 xilisf配置 4 xilisf应用示例 工程下载 本文是Xilinx MicroBlaze系列教程的第9篇文章 1 xilisf库简介 xilisf库 Xilinx In s
  • 32位下printf的坑(输出错误的值)

    记一次使用printf的坑 printf输出错误 32位编译 include
  • 360校招编程题:内存管理

    题目描述 物联网技术的蓬勃发展 各种传感器纷纷出现 小B所在的项目组正在开放一个物联网项目 她们在研究设计一种新的传感器 这种传感器有自己的基本处理单元 具有一定的自主性 能够进行简单的数据收集 处理 存储和传输 为降低系统功耗并保证系统可