c语言 招聘笔试题,百度招聘笔试题及答案

1.编程:

用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。

2.

函数的功能是拷贝src所指的内存内容前n个字节

到dest所指的地址上。

3英文拼写纠错:

在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包

含了正确英文

4寻找热门查询:

搜索

的长度为1-255字节。假设目前有一千万个记录,

这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个

。一个查询串的重复度越高,说明查询它的用户越多,

也就是越热门。请你统计最热门的10个查询串,要求使用的

5集合合并:

给定一个字符串的集合,格式如:

{aaabbbccc},{bbbddd},{eeefff},{ggg},{dddhhh}

要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应

输出

{aaabbbcccdddhhh},{eeefff},{ggg}

(1)请描述你解决这个问题的思路;

(2)请给出主要的处理流程,算法,以及算法的复杂度

(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。

1

1题

char*revert(char*str)

{

intn=strlen(str);

inti=0;

charc;

for(i=0;i{

c=str;

str=str[n-i];

str[n-i]=c;

}

returnstr;

}

///

2题

void*memmove(void*dest,constvoid*src,size_tn)

{

assert((dest!=0)&&(src!=0));

char*temp=(char*)dest;

char*ss=(char*)src;

inti=0;

for(;i{

*temp =*ss ;

}

returntemp;

}

/

3题

(1)思路:

字典以字母键树组织,在用户输入同时匹配

(2)

流程:

每输入一个字母:

沿字典树向下一层,

a)若可以顺利下行,则继续至结束,给出结果;

b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);

算法:

1.在字典中查找单词

字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母

一个字母匹配.算法时间就是单词的长度k.

2.纠错算法

情况:当输入的最后一个字母不能匹配时就提示出错,简化出错处理,动态提示

可能处理方法:

(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;

(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可

以有更多的)

根据分析字典特征和用户

复杂性分析:影响算法的效率主要是字典的实现与纠错处理

(a)

(3)改进

策略选择最是重要,可以采用统计学习的方法改进。

//

4题

(1)思路:

用哈希做

(2)

首先逐次读入查询串,算哈希值,保存在

哈希的设计是关键。

//

5题

(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有

就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比

较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,

就终止。

(2)处理流程:

1.将集合按照大小排序,组成集合合并待处理列表

2.选择最小的集合,找出与之有交集的集合,

如果有,合并之;

如果无,则与其它集合是独立集合,从待处理列表中删除。

3.重复直到待处理列表为空

是否有此元素存在:

1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置。转3

2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素

都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集

合列表。转3。

3。如果待处理集合列表不为空,转2。

如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。

算法复杂度分析:

假设集合的个数为n,最大的集合元素为m

排序的时间复杂度可以达到n*log(n)

然后对于元素在其他集合中查找,最坏情况下为(n-1)*m

查找一个集合是否与其他集合有交集的最坏情况是m*m*(n-1)

合并的时间复杂度不会超过查找集合有交集的最坏情况。

所以最终最坏时间复杂度为O(m*m*n*n)

需要说明的是:此

于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先

与最大的集合进行比较,这些都最大的回避了最坏情况。

(3)可能的改进:

首先可以实现将每个集合里面的字符串按照

合并的效率增高。

另外,可能采取恰当的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值