package com.example.demo.leetcode.case202208;
import java.util.*;
import java.util.stream.Collectors;
/**
* 功能描述
*
* @author ASUS
* @version 1.0
* @Date 2022/8/7
*/
public class Main2022080701 {
/*
有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,
需要按需分配内存池中的资源,返回申请结果成功失败列表。分配规则如下:
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
*/
public static void main(String[] args) {
// 获取输入信息
Scanner scanner = new Scanner(System.in);
// 首先搞清楚我们有多少内存池资源 从小到大排列
// 内存池资源
String[] split = scanner.nextLine().split(",");
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
for (String str : split) {
treeMap.put(Integer.parseInt(str.substring(0, str.indexOf(":"))), Integer.parseInt(str.substring(str.indexOf(":") + 1)));
}
// 内存申请序列
List<Integer> list = Arrays.asList(scanner.nextLine().split(","))
.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
// 内存池资源 >= 内存申请序列 且按顺序逐个安排
// 输出结果保存
List<String> result = new LinkedList<>();
// 是否已找到符合要求的标识
boolean isBool;
for (int i = 0; i < list.size(); i++) {
// 默认初始化未找到
isBool = false;
// 内存申请序列
Integer applyInt = list.get(i);
// 内存池资源
Set<Integer> keySet = treeMap.keySet();
Iterator<Integer> iterator = keySet.iterator();
while (iterator.hasNext()) {
Integer currentInt = iterator.next();
if (currentInt >= applyInt && treeMap.get(currentInt) >= 1) {
// 找到匹配的对应数量减少1
treeMap.put(currentInt, treeMap.get(currentInt) - 1);
result.add("true");
// 已找到符合要求的
isBool = true;
break;
}
}
if (!isBool) {
result.add("false");
}
}
// 打印
System.out.println(result.stream().collect(Collectors.joining(",")));
}
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/279316.html