题目: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)复杂度。