2016腾讯笔试
来源:互联网 发布:同服务器域名查询 编辑:程序博客网 时间:2024/06/06 01:08
网上笔试,当初自己报的岗位好像是移动事业群什么的,题目也多数跟移动开发相关,也是比较难的,还有很多细的东西,没注意就忘记了。在这里把这些题目记一下吧。
最后的四道大题:
第一题
假设在32位机器上,请在2亿个随机的、未经排序的32位整形数字中找出中间值。
算法导论的课并没有学,自己的算法基础什么的也算不上多好,本能的反应就想到快排了,自己想的方法就是:
类似快排的思想,取第一个数,将所有数据分为两拨
中位数肯定是在排好序中的第一亿个数
那么肯定在这两拨数里面数量多的那部分,数量少的那部分就可以不管了
然后再对数量多的那部分分,目的是要找到第一亿个数所在的位置,或者所在的区间
这样做的缺点很明显,就像快排那样不稳定,给你一个排好序的队列,就要数到死,还有就是扫描这整个数列太多遍了。
之前有一个算法是这样的:
1、扫描整个数列,如1、9、5、6、2
2、自定义一个数组,将其位置置为1,就得到[0 1 1 0 0 1 1 0 0 1]
3、这样再扫描一遍数组,有输出的第三个1的数字,就是中位数了
这个也是不行的,对于2亿个int32的数字,不可能没有重复的,一旦有重复的,这个算法就不是那么试用了,而且数组需要开的很大,内存够吗?这我也不是太懂。
扫描整个数列,将整个数列分为N个块,比如0-100、101-200…这样
找出第一亿个数所在的块,其位置在哪一块里面,再从里面找就行了
或许这是个最好的解决办法了。
第二题
如果输入的字符串只包含字母和#号。编写一个函数func,功能是除了中间和尾部的#号外,将字符串中的其它#号都删除。
中间的#号,不懂是字符串的中间,还是所有#号的中间,所以就当做是所有#号的中间值来处理了。感觉自己完全没有考虑效率问题,会不会太水,就是扫描一遍字符串,得到所有#号的长度,再扫描一遍,如果位置在中间和末尾的#号保留即可。
string func(string str){ vector<int> v; string result = ''; for(int i=0; i<str.size(); i++){ if(str[i] == '#'){ v.push_back(i); } } for(int i=0; i<str.size(); i++){ if(str[i]!='#' || i==(v.size()-1)/2 || i==v[v.size()-1]){ result += str[i]; } } return result;}
还有两题:
第三题
使用JNI写一段代码,实现jstring Java_com_demo_helloworld(JNIEnv *env, jclass cls, jstring j_str)函数,实现在字符串j_str(“world”)前面加上hello,并返回第四题
现有大量英语文章,统计出里面每个单词出现的次数,考虑程序运行效率,给出思路(不区分大小写,假设只含有英文字母)
- 2016腾讯在线笔试
- 2016腾讯笔试
- 2016腾讯笔试
- 【笔试练习】腾讯2016笔试题
- 腾讯2016在线模拟笔试
- 2016腾讯实习生在线笔试
- 2016腾讯de笔试online
- 2016腾讯模拟笔试题
- 腾讯2016校招笔试
- 腾讯2016笔试题答案
- 腾讯笔试
- 腾讯笔试
- 腾讯笔试
- 腾讯笔试
- 腾讯笔试
- 腾讯笔试
- 腾讯笔试
- 腾讯2016年校招实习笔试题
- c++学习笔记
- Java Web开发 之VO、PO、TO、SOA、DTO等收集
- CSS各种居中方法
- HWI SWI TASK IDLE
- 列表页换行清理浮动
- 2016腾讯笔试
- 架构设计:负载均衡层设计方案(5)——LVS单节点安装
- grunt学习(四)——css资源的合并和压缩
- 百度干净云(无广告不限速的绿色百度云客户端)
- Android学习笔记之:NDK开发环境配置
- Developer-BroadcastReceiver
- Android开源项目分类汇总
- 计算机基础知识
- bzoj-2178 圆的面积并