百度面试题
来源:互联网 发布:qq情侣头像软件 编辑:程序博客网 时间:2024/05/16 00:36
1.一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
这道题的解答请看下一篇日志
2.一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba。
当时怎么想的忘记了,现在重新思考一下,文件的大小上限是10G,不可能在内存操作了。考虑设计一种hash使得如果两个字符串维相反串能得出相同的hash值,然后用该hash将文件中的字符串散列到不同的文件中,再在各文件中进行匹配。比如这样的hash函数对字符串上所有字符的ascii求和,因为长度在1K以内,因此范围在int之内。更进一步,可以在上面那个hash后面再加一个字符串长度,可以得到更好的散列效果。
在各个单独文件中匹配时,如果采用的是第二种hash函数,那么该文件中的所有字符串都有相同的长度。如果hash效果好,那么这个文件应该小到可以在内存中进行操作了。将文件拷贝为两份,分别按照不同规则hash:第一份按前k位哈希,第二份将字符串的头尾进行颠倒后按前k位哈希(只是对于排序算法颠倒,不必实际颠倒)。这里的按前k位哈希只需要前k位相同能得到相同结果就好,比如第i位的ascii乘以2^i。两份拷贝中hash值相同的就很可能是要求的相反串对了,再进行实际匹配,工作量应该就可以接受了。
3.STL的set用什么实现的?为什么不用hash?
是用红黑树实现的,红黑树是一种平衡性很好的二分查找树。要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了,而是用红黑树只需要为不同类型重载operator<就可以了。
修改于2011.9.2
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 2007 百度面试题
- 百度面试题一道
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题1
- 百度面试题
- 百度面试题
- 腾讯 百度 面试题
- java中List转换为Array与Array转换为List
- java判定email
- 匈牙利命名法、Camel命名法与Pascal命名法
- window.open 打开新窗口无提示自动关闭父窗口
- JavaEye 在线交流群,欢迎您加入!
- 百度面试题
- ASP.NET错误处理:Runtime Error
- Struts2的国际化
- Shell脚本调试技术
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- Tomcat绑定多个IP地址 多域名绑定
- 投资入门第 3 步:技术分析法(常用技术分析)
- 第一篇技术博客
- MySQL - 用户及权限管理