网站开发属于固定资产吗,wordpress怎么改为中文字体,做淘宝客需要企业网站吗,大型企业网站源码OD统一考试#xff08;C卷#xff09; 分值#xff1a; 200分 题解#xff1a; Java / Python / C 题目描述
请实现一个简易内存池,根据请求命令完成内存分配和释放。
内存池支持两种操作命令#xff0c;REQUEST和RELEASE#xff0c;其格式为:
REQUEST请求的内存大小 … OD统一考试C卷 分值 200分 题解 Java / Python / C 题目描述
请实现一个简易内存池,根据请求命令完成内存分配和释放。
内存池支持两种操作命令REQUEST和RELEASE其格式为:
REQUEST请求的内存大小 表示请求分配指定大小内存如果分配成功返回分配到的内存首地址;如果内存不足或指定的大小为0则输error。RELEASE释放的内存首地址 表示释放掉之前分配的内存释放成功无需输出如果释放不存在的首地址则输出error。
注意
1.内存池总大小为100字节
2.内存池地址分配必须是连续内存并优先从低地址分配
3.内存释放后可被再次分配已释放的内存在空闲时不能被二次释放。
4.不会释放已电请的内存块的中间地排
5.释放操作只是针对首地址所对应的单个内存块进行操作不会影响其它内存块。
输入描述
首行为整数N表示操作命令的个数取值范围: 0 N100。
接下来的N行,每行将给出一个操作命令操作命令和参数之间用“”分割。
输出描述
见题面输出要求
示例1
输入
3
REQUEST30
RELEASE0
REQUEST30输出
0
0
题解 解题思路 该问题要求实现一个简易内存池支持两种操作命令REQUEST 和 RELEASE。 REQUEST 表示请求分配指定大小内存 RELEASE 表示释放之前分配的内存。 内存池总大小为 100 字节地址分配必须是连续内存并优先从低地址分配。 解题思路主要包括以下几个步骤 定义内存池的大小、内存使用状态、已分配内存的字典映射首地址到内存大小。实现 request 方法用于处理请求分配内存的操作。遍历内存池找到连续的空闲内存块并记录已分配的内存块。实现 release 方法用于处理释放内存的操作。在已分配的内存块中查找要释放的地址将其标记为空闲状态。在 main 函数中根据输入命令调用相应方法输出结果。 Java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;/*** author code5bug*/
public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n Integer.parseInt(in.nextLine());Solution solution new Solution();for (int i 0; i n; i) {String[] split in.nextLine().split();int val Integer.parseInt(split[1]);if (REQUEST.equals(split[0])) {// 申请内存solution.request(val);} else {// 释放内存solution.release(val);}}}
}class Solution {// 声明一个静态字符串变量用于表示错误信息public static String ERROR error;// 内存大小private int size;// 内存使用状态private boolean[] mem;// 已经使用的内存首地址, 内存大小private MapInteger, Integer used new HashMap();public Solution() {this.size 100;this.mem new boolean[size];}// 申请内存public void request(int val) {if (val 0 || val 100) {System.out.println(ERROR);return;}for (int i 0; i size; i) {// 当前内存已被使用if (mem[i]) continue;int cnt 0; // 空闲的连续内存大小while (i cnt size !mem[i cnt]) cnt;// 空间足够分配if (cnt val) {// 记录已经申请的内存片段used.put(i, val);// 标记内存点已被使用while (--val 0) mem[i val] true;System.out.println(i);return;}i cnt;}System.out.println(ERROR);}// 释放内存public void release(int addr) {if (!used.containsKey(addr)) { // 不存在的首地址System.out.println(ERROR);return;}// 释放内存片段int s addr, len used.get(s);// 标记内存点空闲for (int i 0; i len; i) mem[s i] false;used.remove(addr);}
}
Python
class Solution:# 类变量用于表示错误信息ERROR errordef __init__(self):self.size 100# 内存使用状态self.mem [False] * self.size# 已经使用的内存 {首地址: 内存大小}self.used {}# 申请内存def request(self, val):if val 0 or val 100:print(self.ERROR)returni 0while i self.size:# 当前内存已被使用if self.mem[i]:i 1continuecnt 0 # 空闲的连续内存大小while i cnt self.size and not self.mem[i cnt]:cnt 1# 空间足够分配if cnt val:# 记录已经申请的内存片段self.used[i] val# 标记内存点已被使用for j in range(val):self.mem[i j] Trueprint(i)returni cntprint(self.ERROR)# 释放内存def release(self, addr):if addr not in self.used: # 不存在的首地址print(self.ERROR)return# 释放内存片段s, length addr, self.used[addr]# 标记内存点空闲for i in range(length):self.mem[s i] Falsedel self.used[addr]def main():n int(input())solution Solution()for _ in range(n):relation input().split()val int(relation[1])if relation[0] REQUEST:# 申请内存solution.request(val)else:# 释放内存solution.release(val)if __name__ __main__:main()
C
#include iostream
#include unordered_map
#include vector
#include sstreamusing namespace std;void request(vectorbool mem, unordered_mapint, int used, int val) {const int size mem.size();if (val 0 || val size) {cout error endl;return;}for (int i 0; i size; ) {if (mem[i]) {i;continue;}int cnt 0; // 空闲的连续内存大小while (i cnt size !mem[i cnt]) {cnt;}if (cnt val) {used[i] val;for (int j 0; j val; j) {mem[i j] true;}cout i endl;return;}i cnt;}cout error endl;
}void release(vectorbool mem, unordered_mapint, int used, int addr) {if (used.find(addr) used.end()) {cout error endl;return;}int len used[addr];for (int i 0; i len; i) {mem[addr i] false;}used.erase(addr);
}int main() {int n;cin n;cin.ignore(); // Consume the newline after nconst int size 100;// 内存使用状态vectorbool mem(size, false);// 已经使用的内存首地址, 内存大小unordered_mapint, int used;for (int i 0; i n; i) {string line;getline(cin, line);int pos line.find();string operation line.substr(0, pos);int val stoi(line.substr(pos 1));if (operation REQUEST) {request(mem, used, val);} else {release(mem, used, val);}}return 0;
} ❤️华为OD机试面试交流群每日真题分享 加V时备注“华为od加群” 整理题解不易 如果有帮助到您请给点个赞 ❤️ 和收藏 ⭐让更多的人看到。