刚面试回来,分享两道面试题给大家做,比较简单,怎样做最好?
1‘、有一个vector<string> fruits=<"apple","orrange","banana","orrange","apple".,,,,,,,,,,,,>这样的容器,叫你统计容器里每种水果的数量并输出。
实现版本1:
void furitCount(const &vector<string> fruits)
{
int applenum,orrangenum,banananum;
applenum=orrangenum=banananum=0;
vector<string>::iterator it;
for(it=fruits.begin(),it!=fruit().end(),it++){
if( (*it).compare("apple")
applenum++;
else if( (*it).compare("prrange") )
orrangenum++;
else if( (*it).compare("banana") )
banananum++;
else cout<<"error"<<endl; }
cout<<"applenum: "<<applenum<<endl;
cout<<"orrangenum: "<<orrangenum<<endl;
cout<<"banananum: "<<banananum<<endl;
} 但是感觉这个版本的实现太过平庸,没有体现任何技巧,于是实现版本2
实现版本2:
void furitCount(const &vector<string> fruits){
int applenum,orrangenum,banananum;
applenum=orrangenum=banananum=0; applenum=count(fruits.begin(),fruits.end(),"apple"); orrangenum=count(fruits.begin(),fruits.end(),"orrange"); banananum=count(fruits.begin(),fruits.end(),"banana");
}
这个版本感觉使用了一点点stl中自带算法的,看起来更简洁更高大上,但是要遍历三次才能统计完,性能太差。
各位看管能否给出你们的实现代码呢?我觉得面试官应该像看到的不是我上述两个代码吧?他应该想看到更多的技巧!!!
2、_int8 data 是一个8位的有符号整数,请将上面得到的各种水果的总数用data存储,写出存储过程和解析过程
实现代码:
存储过程:
data=applenum;
data<<2;
data+=orrangenum;
data<<2;
data+=banananum;
解析过程:
banananum=data&3;
data>>2;
orrangenum=data&3;
data>>2;
applenum=data&3;
存在问题:
每个水果的数量分配两个位只能表示最多到3,分配3个又不够,大家有更好更高效的存储方法么?
第三题有点记不住了,也没多大价值,先请各位看官看看上面两个题吧,怎么写才是最好的答案?