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; }