今天某公司的笔试题 大家看看

fx397993401 2012-05-13 08:32:18
加精


1)打印汉诺塔移动步骤,并且计算复杂度
2) 计算两个字符串的是否相似(字符的种类,和出现次数相同)
3)定义二叉树,节点值为int,计算二叉树中的值在[a,b]区间的节点的个数
4)动态规划题:一条路有k可坑,每次能跳平方数步长(1 4 9 16。。),不能跳到坑里,从a跳到b最少几步?
【 补充 ing
在一个坐标轴上, 给定两个点,一个起点,一个终点,起点有一个方块,方块可以左右移动,但是移动的长度只能是平方数长(1,4,9,16 ••••) ,同时坐标轴上还有洞,移动的过程中不能越过这个洞,不然会掉下去,问 由起点到终点 至少需要多少次移动,不能到达返回-1.

5)给一个整数数组,求数组中重复出现次数大于数组总个数一半的数。
6)一个128bits 的二进制流,要求找出 里面包含 某8bits 二进制流的数目

都需要用C 代码实现,
第二题 没有规定字符一定是英文字符 ,如果用开一个hash数组,应该至少开多大的呢? 用C++ map 则不用考虑这个问题
第三题 貌似比较快的要用树状数组或线段树,我手写有困难,但是我自己用遍历的方式,
第四题 动态转移方程
f(n) = min( f(大于n的第一个平方数 -n) ,f(n- 小于n的第一个完全平方数) +1 )
    = 1 :: 如果n 是完全平方数
第五题 遍历一次就可以 ,编程之美上面的经典题
第六题 我不知道,这个二进制流应该如何处理?
...全文
14207 139 打赏 收藏 转发到动态 举报
写回复
用AI写文章
139 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanttoflysky 2012-10-27
  • 打赏
  • 举报
回复
第五题如果仅仅依靠dp还是有法可依的,具体参照马的遍历
关键入前几楼所说,存在81-0-100的可能,范围不是想当然的开始到结束。
幸运的是,出现了一个hole的东东十分给力,帮我们判断出了范围
当一面的范围确定下来,另一面也就容易了,参照pow(x+1,2)-pow(x,2)<=end-first这个方法,确定范围
然后就开始马的遍历的说。
随手写了点代码,自己测试的结果都正确了,当然,用队列可以进行优化,也欢迎大家指出错误之处


#include <stdio.h>

int set(int a[],int max)
{
a[0]=0;
for(int i=1;a[i-1]<max;i++)
a[i]=i*i;
}
int main()
{
int date[400];
int map[12000];
set (date,10000);
int first,len,end,hole,left,right,length;
while(scanf("%d%d%d",&first,&end,&hole)!=EOF)
{
if(hole<end&&hole>first)
printf("-1\n");
else
{
if(hole>end)
hole = first-(hole-end);
if(hole<0)
{
first -= hole;
end -=hole;
hole = 0;
}
left = hole;
for(len=0;date[len+1]-date[len]<end-first;len++);
right = end+date[len];
length = right-left;
int k=1;
int step=0;
for(int i=left;i<=right;i++)
{
map[i]=9999;
}
map[first]=1;
while(length)
{
step++;
for(int j=left;j<=right;j++)
if(map[j]==step)
{
int begin = j;
for(int i=begin+1;i<=right;i++)
{
if(date[k]==i-begin)
{
k++;
map[i]=step+1<map[i]?step+1:map[i];
length--;
if(end==i)
{length=0;j=right+1;break;}
}
}
if(length==0)break;
k=1;
for(int i=begin-1;i>=left;i--)
{
int x;
if(i==100&&begin==181)
x++;
if(date[k]==begin-i)
{
k++;
map[i]=step+1<map[i]?step+1:map[i];
length--;
if (end==i)
{
length=0;
j = right+1;
break;
}
}
}
}
}
printf("%d",map[end]-1);
}
}
}
cnfhv1988 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 132 楼 的回复:]

引用 10 楼 的回复:

偶来写一下第五题:
C/C++ code
int MoreThanHalfNum(int *a , int n )
{
int i , k , num = a[0];
int times = 1;
for(i = 1 ; i < n ; ++i)
{
if(times == 0)
……


明显就是错误的.
当第一个数和第二个不一样,但……
[/Quote]

你给的数组根本不符合条件好不?重复出现次数大于数组总个数一半
fanjun861204 2012-10-08
  • 打赏
  • 举报
回复
学习了,菜鸟生涯
huangxy10 2012-10-05
  • 打赏
  • 举报
回复
最后一题可以用hash做,或者叫做计数法去做。
线性的。
huangxy10 2012-10-05
  • 打赏
  • 举报
回复
好难。。
unlucky 2012-09-20
  • 打赏
  • 举报
回复
很牛逼啊,我也要回去学习算法才行
你妹的特盗不 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

偶来写一下第五题:
C/C++ code
int MoreThanHalfNum(int *a , int n )
{
int i , k , num = a[0];
int times = 1;
for(i = 1 ; i < n ; ++i)
{
if(times == 0)
……
[/Quote]

明显就是错误的.
当第一个数和第二个不一样,但第三个又和第一个一样,第四个又和第二个一样.
int a[]={5,6,5,6,5,6,5,6,7};
超级大笨狼 2012-09-17
  • 打赏
  • 举报
回复
99.9就意味着0.5^N<0.1
N>lg0.1/Lg0.5
四次就可以达到99.9的胜率。

7次,就可以达到99.99
甭管数组多大
超级大笨狼 2012-09-17
  • 打赏
  • 举报
回复
5)给一个整数数组,求数组中重复出现次数大于数组总个数一半的数。

这个用打靶法好了,概率大于几个9就找到了。
1018617158 2012-09-17
  • 打赏
  • 举报
回复
基础不牢,这种问题还是有点模糊
jediael_lu 2012-08-21
  • 打赏
  • 举报
回复
都是基础知识的灵活运用
hxd_2012ai 2012-08-15
  • 打赏
  • 举报
回复
动态规划好难
yzx41099296 2012-08-15
  • 打赏
  • 举报
回复
#include <stdio.h>
int isSqure(int a)
{
int re = (int)sqrt(1.0*a);
if(re*re == a)
return 1;
return 0;
}
int f(int n)
{
int i;
//判断完全平方数

if(isSqure(n))
return 1;

if(n%2==1)//奇数
return 2;

if(n%4==0)//4n
return 2;
if(n%4==2)//4n+2
{
for(i=1;i*i<n;i++)
{
if(isSqure(n-i*i))//平方和
return 2;
}
return 3;
}
}
int main()
{

int a = 50;
int re =f(a);
printf("re:%d\n",re);
system("pause");
}
商科程序员 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
6.变相的KMP算法吧。
[/Quote]这个确实是,我没想到。
商科程序员 2012-07-02
  • 打赏
  • 举报
回复
第二题可以用素数相乘,相等。。。
dahuzilaoren 2012-07-01
  • 打赏
  • 举报
回复
学习了!新人加油学习了
乡客2023 2012-06-28
  • 打赏
  • 举报
回复
慢慢学习
si_sky 2012-06-28
  • 打赏
  • 举报
回复
额。。。我白学了数据结构了。。
liuyuansuccess 2012-06-28
  • 打赏
  • 举报
回复
真的不容易
bjmqz 2012-06-27
  • 打赏
  • 举报
回复
学习下 支持顶个
加载更多回复(93)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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