关闭

中兴编程题--获取未命中个数

标签: 中兴页面置换未命中
329人阅读 评论(0) 收藏 举报
分类:

题目描述:
输入最大缓存个数max_cache_size和页面申请数组page_requests,请求进入时的缓存状态,按留在缓存中最长时间到留在缓存中最短时间排序。输出未命中页面个数。
例如:
输入:
max_cache_size: 2
page_requests:[1, 2, 1, 3, 1, 2]
输出:
5。
作者解释:这其实是先进先出页面置换算法,来求未命中个数。
作者设计:用一个vector容器来模拟队列,外层是一个大循环,指针指向数组第一个元素,知道指向最后一个元素为止,循环结束。循环内部有两个if判断。先判断队列是否为空,若为空,则压入元素,未命中加1;若不为空,则用find()函数查找该元素是否在队列中,若不在,未命中加1,这时候再做一次判断,队列是否已满,若满,先弹出队头元素,再在队尾压入元素;否则直接压入。若在,则继续循环。
代码如下所示:

# include <iostream>
# include <vector>
# include <algorithm>

using namespace std;

int getMissNum(const vector<int> &nums, const unsigned int &n)
{
    if (n <= 0 || nums.empty())
        return 0;
    vector<int> Q;
    int cnt = 0;
    for (unsigned int i = 0; i < nums.size(); ++i)
    {
        if (Q.empty())
        {
            Q.insert(Q.begin(), nums[i]);
            cnt ++;
        }
        else
        {
            if(find(Q.begin(), Q.end(), nums[i]) == Q.end())
            {
                cnt ++;
                if(Q.size() == n)
                {
                    Q.pop_back();
                    Q.insert(Q.begin(), nums[i]);
                }
                else
                {
                    Q.insert(Q.begin(), nums[i]);
                }
            }
        }
    }
    return cnt;
}

int main(void)
{
    int nums_temp1[] = {1, 2, 1, 3, 1, 2};
    int nums_temp2[] = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0};
    int nums_temp3[] = {2, 3, 1, 3, 2, 1, 4, 3, 2};
    vector<int> nums1(nums_temp1, nums_temp1 + 6);
    vector<int> nums2(nums_temp2, nums_temp2 + 16);
    vector<int> nums3(nums_temp3, nums_temp3 + 9);
    cout << "case1, missNum is " << getMissNum(nums1, 2) << endl;
    cout << "case2, missNum is " << getMissNum(nums2, 3) << endl;
    cout << "case3, missNum is " << getMissNum(nums3, 2) << endl;
    return 0;
}

代码中用到了find()函数,所以需要加上头文件# include 。
vector模拟队列是用insert()和pop_back()两个函数实现的,即压入元素insert(Q.begin(), nums[i]),弹出元素pop_back()。
程序中的测试用例均来自中兴官方测试平台。
若有不对之处,敬请指正。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11597次
    • 积分:731
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论