2015年腾讯软开笔试

题目:1亿个QQ号存在set和vector两个容器当中,请你剔除个位数为奇数的QQ号码。

问题分解:

问题一:QQ号用什么类型存储?

问题二:vector 最好不删除中间元素?

问题三:set是由红黑树实现的,插入,删除操作对效率的影响大吗?

问题一分析:

unsigned int 在32位机中最大存储数为2^32 - 1 = 4294967295,大概43亿,假设题目中的1亿号码都在0~4294967295这个范围内。

计算1亿个号码,以unsigned int存储,需要占用多大的内存空间:

10^8 * 4 byte = 381.469M,空间不大,不成什么问题!

问题二分析:

vector是动态数组,不适于频繁插入和删除,因此,不便于在原有的vector上做删除操作;

问题三分析:

set 的key和value都是同一个;

set不能修改原值,只能删除后再插入,所以迭代器都是const的;

set的插入、删除操作是O(logN)复杂度。

原文地址:https://www.cnblogs.com/wiessharling/p/4377436.html