Java计算FIFO的缓存未命中数

来源:互联网 发布:xin域名是什么意思 编辑:程序博客网 时间:2024/05/16 10:58

题目:在操作系统中,有一种虚拟内存管理技术是先进先出(FIFO)缓存,当所请求的存储页面不在缓存中或者缓存已满,应该从缓存中移除持续时间最长的页面,以腾出空间给更多请求的页面。如果缓存未满,那么可以简单的将请求的页面添加到缓存。给定的页面应在缓存中最多出现一次。当请求某个页面而在缓存中未找到此页面时发生缓存未命中。

 

给定缓存的最大尺寸和页面请求列表,计算缓存未命中数。

 

输入:

方法的输入包含两个参数 max_cache_size表示最大缓存尺寸的整数。数据在1-50之间。

paga_requests,表示len个页面的页面请求的整数列表。

 

输出:

返回一个表示缓存未命中的正整数。

 

测试用例:

输入:2 , [1,2,1,3,1,2]

输出:5

输入:3, [7.0.1.2.0.3.0.4.2.3.0.3.2.1.2.0]

输出:12

输入:2, [2,3,1,3,2,1,4,3,2]

输出:7


最开始的想法是用一个ArrayList做,但是通过率只有80%,也不知道是哪儿错了。

后来决定用队列做,其实应该用队列的,毕竟都是FIFO的机制。但是队列做的时候开始也只通过了90%,后来想到应该判断一下边界条件,所以就AC了。

public class ZTE_FIFO {public static void main(String[] args) {int a=2;int []arr={1,2,1,3,1,2};System.out.println(countCacheMiss(a,arr));}public static int countCacheMiss(int max_cache_size,int [] page_requests){Queue<Integer> queue=new LinkedList<Integer>();int num=0;for(int i=0;i<page_requests.length;i++){int key=page_requests[i];if(!queue.contains(key)){if(queue.size()<max_cache_size){queue.offer(key);}else{queue.poll();queue.offer(key);}num++;}}return num;}}


 

 

 

 

原创粉丝点击