一、题目
数据库缓存,模拟访问规则如下:
当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。
若缓存已满,则必须删除一个缓存。
给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数
输入
2
1 2 3 1 2 3
输出
4
二、代码实现
/**
* 数据库缓存
* 模拟访问规则如下:
* 当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。
* 若缓存已满,则必须删除一个缓存。
* 给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数
* 输入
* 2
* 1 2 3 1 2 3
* 输出
* 4
*/
public static int queryDataBase(int cacheSize,int[] ids){
// 操作系统OPT算法,最优的删除策略
// 如果当前缓存中某个元素在之后不会被使用到,那么可以将其删除
// 如果当前缓存中所有元素在之后的都会使用到,那么删除“最晚使用到”的那个元素
// 这样才能使得访问数据库总数最少
if(ids.length==0){
return 0;
}
HashSet<Integer> cache = new HashSet<>(

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



