2016携程测试实习生笔试编程题

 

四道大题:

第一道题,是携程网站有一个725*286(具体不记得了)广告区域,能想到的测试类型及方法。

写测试用例——2016年1月1日到2016年3月1日同一订单往返机票立减50 全部功能点。

第二道题,sql语句。(该学sql- -)

第三道题,编程题:

有N个球,M个颜色(M小于等于N),求要想从这N个球里拿出全部(M)个颜色的球,至少需要拿多少个。

思路:

我又是用map实现的,当map的size==M的时候,就说明颜色已经集齐了,计算一个minNum,然后继续扫描,更新minNum

感觉效率有点低,先粘上来代码,明天优化一下(集齐颜色后,判断是否一定需要更新minNum)

#include<iostream>
#include<map>
#include<vector>
using namespace std;

int CollectColor(vector<int> balls,int M){
    map<int,int> collect;
    int minNum=9999,mintemp=9999;
    for(int i=0;i<balls.size();i++){
        collect[balls[i]]=i;   //map记下每个颜色最近出现的位置
        if(collect.size()==M)  //集齐颜色就不再扫描了
        {    
            int maxIndex=0,minIndex=99999;
            for(auto j=collect.begin();j!=collect.end();j++){
                
                if((*j).second>maxIndex)
                    maxIndex=(*j).second;
                if((*j).second<minIndex)
                    minIndex=(*j).second;
                mintemp=maxIndex-minIndex+1;
            }
                if(mintemp<minNum)
                    minNum=mintemp;

        }
        
    }
    return minNum;
}

int main(){
    int array1[]={0,1,2,6,7,4,1,1,1,1,2,6,7,2,2,0};
    vector<int> v1(array1,array1+16);
    cout<<CollectColor(v1,6)<<endl;
    return 0;
}

 

posted @ 2016-04-06 22:14  0giant  阅读(1985)  评论(0编辑  收藏  举报