360的笔试编程题之内存管理
来源:互联网 发布:数据库三大范式的理解 编辑:程序博客网 时间:2024/05/23 19:11
题目自行阅读,直接上代码:
import java.util.*;public class Main{ public static void main(String args[]) { Scanner cin = new Scanner(System.in); int T = cin.nextInt(); int MaxMem = cin.nextInt(); //用数组模拟内存 int[] arr = new int[MaxMem]; for (int i=0;i<arr.length;i++){ arr[i]=0; } //内存分配的handler int handle = 0; //保存handler和内存大小 Map map= new HashMap<Integer,Integer>(); //保存handler以及是否删除 Map mapnode= new HashMap<Integer,Boolean>(); //保存handler以及对应数组坐标 Map mapindex= new HashMap<Integer,Boolean>(); while(T>0){ String op = cin.next(); if (op.equals("new")){ int men = cin.nextInt(); //查询内存最大空闲值及坐标 int[] index = findMaxMem(arr); int inx = index[0]; int len = index[1]; int left = len-men; if (left>0){//有足够空间申请 handle++; map.put(handle,men); mapnode.put(handle,true); mapindex.put(handle,inx); //将新的空间赋予数组 for (int i=0;i<men;i++){ arr[inx++]=1; } System.out.println(handle); }else{//没有足够空间申请 System.out.println("NULL"); } } if (op.equals("del")){ int had = cin.nextInt(); if (!map.containsKey(had)){ throw new RuntimeException("ILLEGAL_OPERATION"); } mapnode.put(had,false); int inx = (int) mapindex.get(had); int delmen= (int) map.get(had); //将指定空间恢复为0 for (int i=0;i<delmen;i++){ arr[inx++]=0; } } if (op.equals("def")){ //计算空闲空间 int count=getIdel(arr); for (int i=0;i<arr.length;i++){ if (i<arr.length-count){ arr[i]=1; } else arr[i]=0; } } T--; } } //找到数组中最大空闲数以及起始坐标 private static int[] findMaxMem(int[] arr){ int max=0; int count=0; int maxIndex=0; int maxIndexstart=0; for(int i=0;i<arr.length;i++){ if (arr[i]==0){ if (i==0){ maxIndexstart=0; }else if (arr[i-1]==1){ maxIndexstart=i; } count++; }else{ if (count>max) { maxIndex=maxIndexstart; max=count; } count=0; } } if (count>max) { max=count; maxIndex=maxIndexstart; } int []res=new int[2]; res[0]=maxIndex; res[1]=max; return res; } private static int getIdel(int[] arr){ int count=0; for (int i=0;i<arr.length;i++){ if (arr[i]==0){ count++; } } return count; }}
输出结果:
6 10new 51new 32del 1new 6NULLdefnew 63
0 0
- 360的笔试编程题之内存管理
- 编程规范之内存管理部分
- 高质量C++编程之内存管理
- 《Java优化编程》之内存管理
- C/C++编程之内存管理
- C++编程之内存管理(再谈)
- 内存管理之内存池的设计
- 内存管理之内存池的设计
- android之内存管理的文章收集
- linux011之内存管理的makefile分析
- 操作系统之内存管理
- Android之内存管理
- OC之内存管理
- cocos2dx 之内存管理
- c++之内存管理
- OC之内存管理
- jvm之内存管理
- 操作系统之内存管理
- 常见的几种页面调度算法
- CodeBlocks配置
- 360的一道编程题
- NOI题解(1.9编程基础之顺序查找)(待补全)
- 区块链开发(三)编写调试第一个以太坊智能合约
- 360的笔试编程题之内存管理
- 通过广播发现局域网内的其他设备
- UDP协议相关内容总结
- 4suM
- 了解和使用keystone(五)获取token
- 从今天开始,每日一博
- int输出%f浮点值是0,double/float 浮点数%d输出0的原因
- mac必备
- 设计模式之简单工厂模式