某互联网公司2014年笔试题
2013-10-26 18:24
323 查看
2014年某公司笔试题
序言:文章只是记录自己在某公司笔试中遇到的问题,答案基本都是自己写的,至于效率问题可能还待提高,思路可能还有别的,只是为了让自己有所提高而进行记录,若有错误,不当或更好的方法欢迎提出。
1、按单词翻转字符串(单词中相对的顺序保持不变),字符串存放在一个数组里面,以空格来分隔。比如有字符串"A BC DEF GH IJ KML",翻转后为"KML IJ GH DEF BE A".要求效率越高越好,且不得使用reverse、split、join之类的库函数。
思路:先把整个字符串逆序,然后找空格,继续把空格之间的字符串继续反转一次。
2、从一副扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。规则:2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意1至13的数字。
思路:1、对输入的数组先进行处理,如果有大王,小王则把数组变成四个忽略大小王,JQK分别变成题目所要求的
2、循环整个数组,得到最大值和最小值
3、若最大值-最小值>9,则把所有大于10的数变成-1*(数-11)
4、再次找出最大值和最小值,并得出最大值-最小值的差,如果大于4,则为顺子,否则不是顺子
3、给出定义:在整型数组中,数字减去它右边的数字得到一个数对之差,求所有数对之差的最大值。需要考虑时间、空间复杂度,效率越高越好,并给出分析
例如在数组{2,4,1,16,7,5,11,9}中,数对之差的最大值是11,是16减去5的结果。
思路:从尾到头扫描整个数组,得出每个数右边的最小值构成一个数列;从头到尾扫描一遍数组,把数组中的数跟其右边的数相减并得到最大的值即为答案。
空间复杂度有点高,时间复杂度就是O(N);
序言:文章只是记录自己在某公司笔试中遇到的问题,答案基本都是自己写的,至于效率问题可能还待提高,思路可能还有别的,只是为了让自己有所提高而进行记录,若有错误,不当或更好的方法欢迎提出。
1、按单词翻转字符串(单词中相对的顺序保持不变),字符串存放在一个数组里面,以空格来分隔。比如有字符串"A BC DEF GH IJ KML",翻转后为"KML IJ GH DEF BE A".要求效率越高越好,且不得使用reverse、split、join之类的库函数。
思路:先把整个字符串逆序,然后找空格,继续把空格之间的字符串继续反转一次。
public static void Reverse(char[] str) { int length=str.length; int low=0,high=length-1; char temp; int flag=0;int j=0; //数组全部逆转 while(low<high) { temp=str[low]; str[low++]=str[high]; str[high--]=temp; } //对每个单词再掉转顺序 for(int i=0;i<length;i++) { if(str[i]==' ') { j=i-1; while(flag<j) { temp=str[flag]; str[flag++]=str[j]; str[j--]=temp; } flag=i+1; } } //测试,输出数组 for(int i=0;i<length;i++) { System.out.print(str[i]); } }
2、从一副扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。规则:2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意1至13的数字。
思路:1、对输入的数组先进行处理,如果有大王,小王则把数组变成四个忽略大小王,JQK分别变成题目所要求的
2、循环整个数组,得到最大值和最小值
3、若最大值-最小值>9,则把所有大于10的数变成-1*(数-11)
4、再次找出最大值和最小值,并得出最大值-最小值的差,如果大于4,则为顺子,否则不是顺子
public static void checkSequence(int[] data) { int min=getMaxMin(data)[0][0]; int max=getMaxMin(data)[0][1]; if(max-min>10) { for(int i=0;i<data.length;i++) { if(data[i]>10) data[i]=(-1)*(data[i]-11); } min=getMaxMin(data)[0][0]; max=getMaxMin(data)[0][1]; } if(max-min<5) System.out.println("顺子"); else System.out.println("非顺子"); } public static int[][] getMaxMin(int[] data) { int length=data.length; int max=0,min=0; int a[][]=new int[1][2]; for(int i=0;i<length;i++) { if(data[i]<min) { min=data[i]; } if(data[i]>max) { max=data[i]; } } a[0][0]=min; a[0][1]=max; return a; }
3、给出定义:在整型数组中,数字减去它右边的数字得到一个数对之差,求所有数对之差的最大值。需要考虑时间、空间复杂度,效率越高越好,并给出分析
例如在数组{2,4,1,16,7,5,11,9}中,数对之差的最大值是11,是16减去5的结果。
思路:从尾到头扫描整个数组,得出每个数右边的最小值构成一个数列;从头到尾扫描一遍数组,把数组中的数跟其右边的数相减并得到最大的值即为答案。
空间复杂度有点高,时间复杂度就是O(N);
public static void getMaxPair(int[] data) { int length=data.length; int[] minarray=new int[length-1]; int min=data[length-1]; int max=0; for(int i=length-2;i>=0;i--) { if(data[i+1]<min) { min=data[i+1]; } minarray[i]=min; } for(int i=0;i<length-1;i++) { if(data[i]-minarray[i]>max) { max=data[i]-minarray[i]; } } System.out.println(max); }
相关文章推荐
- 找工作笔试面试那些事儿(15)---互联网公司面试的零零种种和多家经验
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
- 互联网公司笔试常见陷阱
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
- 各大互联网公司2014前端笔试面试题–JavaScript篇
- 一位上了一个大的互联网公司笔试题分享
- 互联网公司笔试常见陷阱
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
- 各大互联网公司2014前端笔试面试题–HTML,CSS篇
- 各大互联网公司前端笔试面试题–HTML,CSS篇
- BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
- 各大互联网公司2014前端笔试面试题–JavaScript篇
- 互联网公司笔试常见陷阱
- BAT及各大互联网公司2014前端笔试面试题:HTML/CSS/JAVASCRIPT
- 各大互联网公司2014前端笔试面试题–JavaScript篇
- 2014年互联网IT公司产品、技术类人员工资待遇汇总 2015部分补充
- 各大互联网公司2014前端笔试面试题–HTML,CSS篇
- 2014年互联网公司职级,薪资表
- 互联网公司笔试常见陷阱
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇