阿里巴巴笔试题+面试题

baiyilieren 2008-10-31 12:19:32
这是今年10月阿里巴巴在西安的笔试题,面试时也问到:
虽然很简单,但优化算法不知如何写:

已知一个整数数组a,给定一个整数x,判断x是否数组a中某两个数之和?

我的算法是:

for(i=0;i<N;++i)
{
for(j=i+1;j<N;++j)
{
if(x==a[i]+a[j])
return 1; //true
}
}
return 0; //false
...全文
2860 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
无天 2010-05-14
  • 打赏
  • 举报
回复
同意二楼的。
urakvv7 2010-05-14
  • 打赏
  • 举报
回复
if [b[x-b[j]-min]] = 1:

if [b[x-j-min]] = 1:

[Quote=引用 8 楼 zeninpalm 的回复:]
二楼的解法不错了,如果是我在面试时肯定也回答这个算法!
7楼算法是基于基数排序来的吧,那么算法还可以再直接点:
1.找出min,max
2.简历b[max-min]
3.for i in all numbers:
b[numbers[i]-min] = 1
4.for j in b[]:
if [b[x-b[j]-min]] = 1:
break;
当然这里假设x>=……
[/Quote]
BuleRiver 2008-11-24
  • 打赏
  • 举报
回复
先排序,然后用二分查找
baiyilieren 2008-11-07
  • 打赏
  • 举报
回复
不知道欧立奇这样的大侠会有怎样的惊人解法啊
baiyilieren 2008-11-07
  • 打赏
  • 举报
回复
你们的位图和哈希法我还是不解,目前还是觉得前面一位大侠说的先快排再二分比较可行
ws023 2008-11-03
  • 打赏
  • 举报
回复
不用排序吧,就先扫一遍,或者用hash或者用bitmap,然后在扫一次,直接定位a对应的x-a是否存在就可以了。
时间复杂度就是0(n),不过建议用bitmap,hash处理冲突会带来额外的问题。
ws023 2008-11-03
  • 打赏
  • 举报
回复
不用排序吧,就先扫一遍,或者用hash或者用bitmap,然后在扫一次,直接定位a对应的x-a是否存在就可以了。
时间复杂度就是0(n),不过建议用bitmap,hash处理冲突会带来额外的问题。
J_Factory 2008-11-03
  • 打赏
  • 举报
回复
也不是最优的方法了,只是想换一种想法,给出a1+a2=x,用x-a1,看下可以在数组里找到a2吗
zhiaini 2008-11-02
  • 打赏
  • 举报
回复
Study
baiyilieren 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 J_Factory 的回复:]
把数组a哈希一下,让后再查找x-a[i]
[/Quote]

4楼能详细一下吗,你的思想让我很震撼,但不知道如何实施。
awqwqw 2008-11-02
  • 打赏
  • 举报
回复
xuexizhong
ZenInPalm 2008-11-01
  • 打赏
  • 举报
回复
二楼的解法不错了,如果是我在面试时肯定也回答这个算法!
7楼算法是基于基数排序来的吧,那么算法还可以再直接点:
1.找出min,max
2.简历b[max-min]
3.for i in all numbers:
b[numbers[i]-min] = 1
4.for j in b[]:
if [b[x-b[j]-min]] = 1:
break;
当然这里假设x>= max
复杂度降为O(n)
dreamer_shax 2008-11-01
  • 打赏
  • 举报
回复
1,找出最大数和最小数,设为min 和max

2,建立一个大小为b[max-min]的数组

3, k = x-a[i]-min ; ( b[k]==1 ? 1 : 继续4

4,b[a[i]-min]=1;

5, i++, 回到3,untial结束
----------------------------------
时间O(n),
空间(max-min),有可能空间暴大,
hityct1 2008-11-01
  • 打赏
  • 举报
回复
顶2楼
cjh1123 2008-11-01
  • 打赏
  • 举报
回复
恩 我的思路 可以先快速排序时间为O(nlogn)
然后利用两个指针分别指向数组的头尾,进行判断,时间为O(n)
Aaron_Jerry 2008-11-01
  • 打赏
  • 举报
回复
如果数组是有序的话,O(n)时间就可以找出来了

int fun(int a[],int n,int x)
{
int i,j;
for(i=0,j=n-1;i<j;)
{
if(a[i]+a[j]==x)return 1;
else if(a[i]+a[j]<x)i++;
else
j--;
}
return 0;
}
baiyilieren 2008-10-31
  • 打赏
  • 举报
回复
哪位大侠有O(n^2)以下复杂度的算法,请指教。谢谢!
hertz2007 2008-10-31
  • 打赏
  • 举报
回复
排序,枚举差,查找。
J_Factory 2008-10-31
  • 打赏
  • 举报
回复
把数组a哈希一下,让后再查找x-a[i]
baiyilieren 2008-10-31
  • 打赏
  • 举报
回复
2楼有一定道理
加载更多回复(1)
阿里巴巴校园招聘笔试面试题淘宝校园招聘笔试试题27个文档资料合集: 2012阿里巴巴校园招聘阿里云C++笔试试题.doc 2013年阿里巴巴校园招聘笔试试题研发工程师.doc 2014年3月阿里巴巴实习招聘笔试题及部分答案.docx 2014年阿里巴巴校园招聘笔试题杭州站-研发类.doc 淘宝2011实习招聘笔试.doc 淘宝校园招聘清华笔试试题.doc 淘宝校园招聘笔试试题.doc 淘宝笔试题及部分答案.docx 阿里巴巴2010校园招聘技术类笔试试题(Java,搜索研发,C++,测试工程师)南京站.docx 阿里巴巴2014校园招聘笔试试题-系统工程师-北京站.doc 阿里巴巴2014校园招聘笔试试题-软件研发工程+网友版答案.docx 阿里巴巴2014校园招聘笔试试题-软件研发工程师+答案.doc 阿里巴巴2014校园招聘笔试题-研发工程师-全国卷.doc 阿里巴巴2014校园招聘笔试题及参考答案-研发工程师-哈尔滨站.doc 阿里巴巴2014校园招聘笔试题目-数据分析师职位(回忆版).pdf 阿里巴巴2014秋季校园招聘-软件研发工程师笔试题-文字版.doc 阿里巴巴2014秋季校园招聘笔试题-测试开发工程师北京卷.pdf 阿里巴巴_java_研发成功笔面试总结.doc 阿里巴巴年校园招聘笔试题(b2b-技术部-工程师)java,算法,C++,测试.doc 阿里巴巴校园招聘Oracle_DBA笔试题及参考答案.doc 阿里巴巴校园招聘前端在线笔试.doc 阿里巴巴校园招聘测试笔试题总结.doc 阿里巴巴校园招聘销售类笔试题.doc 阿里巴巴校园招聘阿里云笔试试题题目.doc 阿里巴巴校园招聘面试试题合集总结.docx 阿里巴巴集团2014校园招聘系统工程师北京站笔试题.doc

33,007

社区成员

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

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