微软100题(81)百度面试题_大数据处理
2015-06-15 11:25
453 查看
第1组百度面试题
1.一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],
其左边的数都小于等于它,右边的数都大于等于它。
能否只用一个额外数组和少量其它空间实现。
2.一个文件,内含一千万行字符串,每个字符串在1K以内,
要求找出所有相反的串对,如abc和cba。
3.STL的set用什么实现的?为什么不用hash?
1解答:
如果一个元素师左边最大的,又是右边最小的,那么就是要找的元素,所以一开始求出所有的右边最小数组rightmin,然后从左往右
2.文件大概10GB,必须要分成小文件处理,如何分,可以用hash(比如把每个字符串中字符的ascii相加,对100取模),分成100个小文件,要保证正串和反串都在一个文件里。
然后对每个文件中的串建立一个hash_set,如果hash_set里面有该串的hash了,则有可能是反串,进一步比较是不是反串,每个小文件都可以放到内存中去处理
或者 建立两个文件,一个文件是hash_set(比如对前K位处理),另一个是每个串反串(也对前K位处理)。如果第二个文件里面串的hash存在于第一个文件的hash_set里面,则有可能是反串,进一步比较
3、是用红黑树实现的,红黑树是一种平衡性很好的二分查找树。要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了,而是用红黑树只需要为不同类型重载operator<就可以了
1.一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],
其左边的数都小于等于它,右边的数都大于等于它。
能否只用一个额外数组和少量其它空间实现。
2.一个文件,内含一千万行字符串,每个字符串在1K以内,
要求找出所有相反的串对,如abc和cba。
3.STL的set用什么实现的?为什么不用hash?
1解答:
如果一个元素师左边最大的,又是右边最小的,那么就是要找的元素,所以一开始求出所有的右边最小数组rightmin,然后从左往右
void ThePivotElements(int data[],int len) { int* rightmin = new int[len]; int r_min = data[len-1]; for (int i = len-1;i>=0;i--) { if(data[i]<r_min) r_min = data[i]; rightmin[i] = r_min; } int l_max = data[0]; for (int i= 0;i<len;i++) { if(data[i]>l_max) l_max = data[i]; if(l_max == rightmin[i]) cout<<data[i]<<endl; } }
2.文件大概10GB,必须要分成小文件处理,如何分,可以用hash(比如把每个字符串中字符的ascii相加,对100取模),分成100个小文件,要保证正串和反串都在一个文件里。
然后对每个文件中的串建立一个hash_set,如果hash_set里面有该串的hash了,则有可能是反串,进一步比较是不是反串,每个小文件都可以放到内存中去处理
或者 建立两个文件,一个文件是hash_set(比如对前K位处理),另一个是每个串反串(也对前K位处理)。如果第二个文件里面串的hash存在于第一个文件的hash_set里面,则有可能是反串,进一步比较
3、是用红黑树实现的,红黑树是一种平衡性很好的二分查找树。要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了,而是用红黑树只需要为不同类型重载operator<就可以了
相关文章推荐
- 黑马程序员__java基础__多线程
- 老板的中心是客户,重心是服务,是行业思维;员工的中心是任务,重心是专业,是职业思维;
- 给90后程序员的一个建议
- 程序员如何写出一份好的文档?
- IT 职业规划
- 入行程序员一个月的感受
- 【剑指offer】面试题六:重建二叉树
- 找工作笔试面试那些事儿(5)---构造函数、析构函数和赋值函数
- 找工作笔试面试那些事儿(3)---内存管理那些事
- 找工作笔试面试那些事儿(2)---函数那些事
- 年轻人,你在职场第几层?
- 搜狐面试- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 搜狐面试- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- 黑马程序员——Java基础—线程
- 程序员不是砌砖工人,他们是作家
- 黑马程序员——Java基础—java基础语法总结
- 理想的程序员
- 黑马程序员------异常总结
- 程序员的职业素养摘要
- 程序员,为未来准备好了吗?