今天早上的面试题9道,比较难,向牛人请教,国内的一牛公司,坐落在北京北四环某大厦:

jefson 2006-03-02 11:54:03
今天早上的面试题9道,比较难,向牛人请教,国内的一牛公司,坐落在北京北四环某大厦:
1、线形表a、b为两个有序升序的线形表,编写一程序,使两个有序线形表合并成一个有序升序线形表h;
2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。
3、用递归算法判断数组a[N]是否为一个递增数组。
4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。
5、编写一unix程序,防止僵尸进程的出现.

同学的4道面试题,应聘的职位是搜索引擎工程师,后两道超级难,(希望大家多给一些算发)
1.给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存dongtai,并且返回交集个数
long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
2.单连表的建立,把'a'--'z'26个字母插入到连表中,并且倒叙,还要打印!
3.可怕的题目终于来了
象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,
请描述思想,写出算发(c语言),空间和时间复杂度,
4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,
...全文
4101 147 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
147 条回复
切换为时间正序
请发表友善的回复…
发表回复
pressman 2006-05-15
  • 打赏
  • 举报
回复
第一题,
char *Merge(char *t1, char *t2);

main()
{
char *r1="BCDEJKLMNOPQRSTUVWXYZacdefghijklmnopqrtuvw";
char *r2="AFGHIbsxyz";
char *r="";
r = Merge(r1, r2);

printf("String1 = %s\n",r1);
printf("String2 = %s\n",r2);
printf("String after union and sort = %s\n",r);

}

char *Merge(char *t1, char *t2)
{
char *t;

int i=0,j=0,p=0;
int lenr1, lenr2;
lenr1=strlen(t1);
lenr2=strlen(t2);

t=(char *)malloc((lenr1+lenr2+1)*sizeof(char));

// printf("%s",*t);

if(!t)
{
printf("Insufficient memory available!");
exit(0);
}

while( (i<lenr1)&&(j<lenr2) )
t[p++]=(t1[i]<=t2[j]) ? t1[i++]:t2[j++];


while( (i<=lenr1)&&(t1[i]!='\0') )
{
t[p++]=t1[i++];
printf("2");
}

while( (j<=lenr2)&&(t2[j]!='\0') )
{
t[p++]=t2[j++];
printf("1");
}


return t;
}
delphihero 2006-05-15
  • 打赏
  • 举报
回复
对于第4个,构造堆应该效率不错,只构造不执行堆排序比o(nlogn)要小,构造堆只要线形时间.
vector<float> bigs;
for(int i=0;i<10000;i++)
{
bigs.push_back((float)rand()/7);
}
cout<<bigs.size()<<endl;
make_heap(bigs.begin(),bigs.end(),greater<float>() );
cout<<"大量排序:"<<bigs[1]<<bigs[2]<<endl;
float ff;
cout<<endl;
time_t t1,t2;
time(&t1);
for(int i=0;i<1000000000;i++)
{
ff = rand()/7+0.1;
if(ff>bigs[0])
{
pop_heap(bigs.begin(),bigs.end(),greater<float>());
bigs.pop_back();
bigs.push_back(ff);
push_heap(bigs.begin(),bigs.end(),greater<float>());
}
}
time(&t2);
cout<<(long)(t2-t1)<<endl;
由于随机数rand()产生的数是愈来愈大,比起真正随机数据,基本是最费时操作.
10亿浮点数用时24秒
hu_an_xiong 2006-05-15
  • 打赏
  • 举报
回复
hearing 2006-05-15
  • 打赏
  • 举报
回复
受教~~~
alan2k 2006-05-15
  • 打赏
  • 举报
回复
其实

我不是程序员
ykyxkhjh 2006-05-15
  • 打赏
  • 举报
回复
第一题
void Merge(SeqList R,int low,int m,int high)
{//将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的
//子文件R[low..high]
int i=low,j=m+1,p=0; //置初始值
RecType *R1; //R1是局部向量,若p定义为此类型指针速度更快
R1=(ReeType *)malloc((high-low+1)*sizeof(RecType));
if(! R1) //申请空间失败
Error("Insufficient memory available!");
while(i<=m&&j<=high) //两子文件非空时取其小者输出到R1[p]上
R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++];
while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中
R1[p++]=R[i++];
while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中
R1[p++]=R[j++];
for(p=0,i=low;i<=high;p++,i++)
R[i]=R1[p];//归并完成后将结果复制回R[low..high]
} //Merge
caiyujie87 2006-05-06
  • 打赏
  • 举报
回复
mark
ggyz 2006-05-05
  • 打赏
  • 举报
回复
mark.不知道这两公司给多少时间做?
hopechen 2006-05-05
  • 打赏
  • 举报
回复
今天下雨了....
Leomaxking 2006-05-05
  • 打赏
  • 举报
回复
汗,都快忘光了!
niatclock 2006-05-04
  • 打赏
  • 举报
回复
MARK
carry_on 2006-04-20
  • 打赏
  • 举报
回复
MARK
计算机交流群22225129(日日日日我要日久)呵呵好记吧
欢迎您的加入
dsygr520yy 2006-04-20
  • 打赏
  • 举报
回复
汗。。。
OctSun 2006-04-20
  • 打赏
  • 举报
回复
mark
toryhector 2006-04-20
  • 打赏
  • 举报
回复
03
if a[n]>=a[n-1]
if array(n-1)递增 return true;
return false;
CAOMFC 2006-04-20
  • 打赏
  • 举报
回复
牛,9道题老子就会作做两个第一题
jiangjundu 2006-04-20
  • 打赏
  • 举报
回复
3:
bool isup(int* t,int n,int count)
{
if(n==count) return true;
else if(t[n]<t[n+1])
return isup(t,++n,count);

}

void main()
{
//int a[10]={1,2,3,4,5,6,7,8,9,10};
int a[10]={3,2,1,5,6,7,8,4,10,9};
printf("%d\n",(int)isup(a,0,sizeof(a)/sizeof(int)));

}
lvg 2006-04-20
  • 打赏
  • 举报
回复
mark
hansin 2006-04-17
  • 打赏
  • 举报
回复
MARK
LifeIsStruggle 2006-04-17
  • 打赏
  • 举报
回复
收藏
加载更多回复(127)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧