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

原创 2016年08月31日 15:56:02

题目描述:
输入最大缓存个数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()。
程序中的测试用例均来自中兴官方测试平台。
若有不对之处,敬请指正。

中兴通讯笔试题

公共部分(50分)   1:作业调度程序从处于(B)状态的队列中选择适当的作业的作业投入运行。(3分)   A 运行 B 提交 C 完成 D后备   2:SQL语言中,删除一个表的命令是(B)(...
  • jhh_move_on
  • jhh_move_on
  • 2015年05月09日 19:24
  • 7836

VS调试器未命中断点问题总结

本文主要总结我在实际工作遇到的一种程序调试问题——VS调试器未命中断点。我主要谈的是用VS调试C++程序。 一、程序分支     调试程序的时候,最常用的就是设置断点(F9, bp - break...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2017年01月24日 13:51
  • 669

2016-2017 华为中兴笔试+测评+技术面+综合二面+洽谈经验

华为中兴笔试+测评+技术面+综合二面+洽谈经验 2017届研究生毕业生招聘 中兴校招回顾: 网申、机试、测评 投的软件研发。网申,然后会收到测评通知,按平时表现做测评,没啥难度,就是花些时间做...
  • u011796715
  • u011796715
  • 2016年09月21日 13:28
  • 25527

滴滴出行2017秋招笔试编程题(一)——连续最大和、末尾0的个数、进制转换

这题比较简单,算法过程就是遍历数组,记录到第i个数的连续最大和,在计算第i个数的连续最大和时,先判断到第i-1个数的连续最大和是正还是负,如果是负数,则到第i个数的连续最大和就是第i个数本身;如果是正...
  • supersnow0622
  • supersnow0622
  • 2017年01月07日 16:08
  • 723

2016年校招秋招 C++开发 面试问题总结(中兴、CVTE、瑞晟、华为、YY)

校招秋招 C++ 开发 面经
  • zxx910509
  • zxx910509
  • 2017年03月04日 17:28
  • 1028

第一届中兴捧月算法大赛迪杰斯特拉派解决方案

迪杰斯特拉派初赛赛题最强大脑中的收官蜂巢迷宫变态级挑战,相信大家都叹为观止!最强大脑收官战打响后,收视率节节攀升,就连蚁后也不时出题难为一下她的子民们。在动物世界中,称得上活地图的,除了蜜蜂,蚂蚁当仁...
  • lingzidong
  • lingzidong
  • 2017年06月04日 14:06
  • 617

redis命中计算

查询命中数: 查询的命中个数,对应 keyspace_hits 字段。 查询未命中数: 查询的未命中个数,对应 keyspace_misses 字段。 查询命中率: 查询命中率,对应 keyspa...
  • lanbingkafei
  • lanbingkafei
  • 2015年01月05日 17:40
  • 2831

Java经典逻辑编程50题

相信很多 Java 初学者都看到过这些题,本人也看了几遍,最终下定决心弄到我的博客中来作为我的学习记录,同时也可供后面的 Java 学习者参考。题目的代码有些时看别人的,大部分是自己写的,如有雷同,请...
  • Alias_fa
  • Alias_fa
  • 2016年10月31日 19:10
  • 2914

CDN缓存不命中排查

Cdn加速配置后,经常碰到客户反馈cdn 缓存不能命中,这里对缓存不能命中进行了总结...
  • Gamay
  • Gamay
  • 2017年06月23日 10:01
  • 921

SAP最大命中数的修改

修改清单显示最大命中数方法: 1、表清单显示的最大命中数修改 方法:菜单——设置——用户参数 2、F4帮助的最大命中数修改 方法:菜单——帮助—...
  • zhongguomao
  • zhongguomao
  • 2017年04月25日 15:39
  • 534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中兴编程题--获取未命中个数
举报原因:
原因补充:

(最多只允许输入30个字)