Java计算FIFO的缓存未命中数

题目:在操作系统中,有一种虚拟内存管理技术是先进先出(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;
	}

}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值