您的位置:首页 > 业界新闻

某互联网公司2014年笔试题

2013-10-26 18:24 260 查看
2014年某公司笔试题

序言:文章只是记录自己在某公司笔试中遇到的问题,答案基本都是自己写的,至于效率问题可能还待提高,思路可能还有别的,只是为了让自己有所提高而进行记录,若有错误,不当或更好的方法欢迎提出。

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: