大众点评网笔试总结
来源:互联网 发布:mac rvm 安装ruby 慢 编辑:程序博客网 时间:2024/05/01 21:28
今天去大众点评网做笔试 题目不难 最后两题编程题相对百度估计就是头两道 可惜脑抽第一道写了个O(N^2)的算法 回来路上一想 其实很简单完全可以做成O(N) 回来赶紧写下来
题目是最大值为N的数列当中 找出所有和为N+1的数值对
拿到题目第一感觉就是两两相加,后来觉得肯定不行 于是做了点儿优化,即快排思路 分成大于(N+1)/2和小于(N+1)/2的 大致就是两个组遍历相加 但其实最后下来还是O(N^2)的时间复杂度。
其实问题在于遍历 不管上面的怎么优化 都是要扫描两遍 出来之后一想 完全可以把计算变为查找 因为查找算法完全可以做到LogN,如果N比较小可以放入内存 利用Bitmap或者哈希甚至可以做到线性算法 那么如何变计算为查找呢?
其实很简单 首先 这里利用bitmap 我们先建立一个含N个元素的位数组,遍历原数组,因为原数组没有元素重复 那么 将原数组中值对应在位数组中的值置为1,比如原数组中遍历到有5,则将位数组第五位置为1,最后我们可以得到一个原数组映射过来的位数组,即Bitmap,这个时间复杂度为O(N),然后再次遍历原数组,求遍历到得数组与N+1的差,然后在bitmap中寻找是否存在这个差,如果有,将该值下标和当前遍历到得值作为数值对存入结果集,比如遍历到10,那么我们在bitmap中查看N-10这个位置的二进制位是否为1,若是 则代表这两个数的和为N,这里就把遍历求和变为了寻找差,总结一下,构造bitmap时间复杂度是O(N),遍历数组求差然后在bitmap中寻找该值时间复杂度也是O(N),总结起来,最后的时间复杂度还是O(N)。
不得不说,考场上脑子总是有点儿抽,出来一想啥都有了,唉~
- 大众点评网笔试总结
- 大众点评笔试总结
- 2012大众点评网笔试题
- 大众点评笔试题
- 大众点评—笔试
- 2013大众点评笔试题
- 大众点评在线笔试题目
- 大众点评2014笔试题目
- 2016大众点评笔试题
- 2012-9-29 大众点评网笔试题
- 两道大众点评网技术部的笔试题
- 2013年大众点评网的一道程序笔试题
- 大众点评网客户端
- 20130530大众点评技术实习生招聘笔试
- 大众点评笔试算法之质因数分解
- 大众点评 在线笔试题 2014
- 大众点评笔试题:十六进制序列
- 大众点评笔试题编程题
- C语言结构体中位域(位段)的使用
- Hook技术
- 3.19 Incomplete library class(不完美的库类)
- mssql定期备份并压缩存档
- int main():声明指定了两个以上的数据类型
- 大众点评网笔试总结
- Response中文乱码问题
- JSP SERVLET编码总结
- MFC构架中文档数据的读取和显示(未完)
- strcpy(),strncpy()
- Win7下如何访问Local Settings等拒绝访问的文件夹?
- STL
- web中文乱码问题
- 7.7 introduce foreign method(引入外加函数)