网站设计页面如何做居中,中文网站做google广告怎么样,大棚建设的网站,网站开发的重要性华为OD机试 2024C卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题#xff08;A卷B卷C卷#xff09;》。
刷的越多#xff0c;抽中的概率越大#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试… 华为OD机试 2024C卷题库疯狂收录中刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷C卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
现代计算机系统通常存在多级的存储设备针对海量的 wordload 的优化的一种思路是将热点内存页优化先放到快速存储层级这就需要对内存页进行冷热标记。
一种典型的方案是基于内存页的访问频次进行标记如果统计窗口内访问次数大于等于设定阈值要实现基于频次的冷热标记。内存页使用页框号作为标识。
二、输入描述
第一行输入为 N, 表示访存序列的记录条数 0 N ≤ 10000。
第二行为访问内存序列空格间隔的 N 个内存页框号页面号范围 0 ~ 65535同一个页框号可能重复出现出现的次数即为对应框号的频次。
第三行为热内存的频次阈值 T 正整数范围 1 ≤ T ≤ 10000。
三、输出描述
第一行为输出标记为热内存的内存页个数如果没有被标记为热内存的则输出 0。
如果第一行大于 0则接下来按照访问频次降序输出内存页框号一行一个频次一样的页框号页框号小的排前面。
四、解题思路
读取输入数据包括访存序列的记录条数N、访问内存序列和热内存的频次阈值T。统计每个内存页框号的访问频次。找出访问频次大于等于阈值T的内存页框号并将它们标记为热内存。按照访问频次降序输出被标记为热内存的内存页框号。
五、Java算法源码
public class Test03 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int N sc.nextInt(); // 读取访存序列的记录条数int[] memoryPages new int[N]; // 存储访问内存序列for (int i 0; i N; i) {memoryPages[i] sc.nextInt(); // 读取访问内存序列}int T sc.nextInt(); // 读取热内存的频次阈值// 统计每个内存页框号的访问频次MapInteger, Integer frequencyMap new HashMap();for (int page : memoryPages) {frequencyMap.put(page, frequencyMap.getOrDefault(page, 0) 1);}// 找出访问频次大于等于阈值T的内存页框号并将它们标记为热内存ListInteger hotMemoryPages new ArrayList();for (Map.EntryInteger, Integer entry : frequencyMap.entrySet()) {if (entry.getValue() T) {hotMemoryPages.add(entry.getKey());}}// 按照访问频次降序输出被标记为热内存的内存页框号Collections.sort(hotMemoryPages, (a, b) - {int freqA frequencyMap.get(a);int freqB frequencyMap.get(b);if (freqA ! freqB) {return freqB - freqA;} else {return a - b;}});System.out.println(hotMemoryPages.size()); // 输出标记为热内存的内存页个数for (int page : hotMemoryPages) {System.out.println(page); // 输出被标记为热内存的内存页框号}}
}
六、效果展示
1、输入
10 1 2 1 2 1 2 1 2 1 2 5
2、输出
2 1 2
3、说明
内存页 1 和内存页 2 均被访问了5 次达到了阈值5 因此热内存页有2个。内存页1 和内存页 2 的访问频次相等页框号小的排前面。 下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 2024 C卷 200分
本文收录于华为OD机试JAVA真题A卷B卷C卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。