声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3253|回复: 4

[经典算法] 一个阿里巴巴笔试题

[复制链接]
发表于 2010-5-13 17:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
判断是否是数组a中任意几个数的之和
例如:
输入:x = 5;a[10] = {1,1,2,3,4,5}
输出:5 = 5; 5 = 4 + 1; 5 = 3 + 2; 5 = 3 + 1 + 1;要求算法高效率
同学说先排序,再递归,求出组合。
各位的意见呢?

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2011-1-10 20:24 | 显示全部楼层
本帖最后由 Rainyboy 于 2011-1-10 20:25 编辑

回复 1 # cc2005726 的帖子

贴一个不完整的吧,算是抛砖引玉……
  1. def main():
  2.     SouceData =[2,3,4,1,1,5,0];
  3.     SouceData.sort();
  4.     MatchData = [0];
  5.     Search(5,SouceData,MatchData);
  6.    
  7. def Search(tag,SD,MD,st=0):
  8.     if tag - SD[st] == 0:
  9.         print MD[1:];
  10.         return True;
  11.     elif tag - SD[st] > 0:
  12.         if st == len(SD):
  13.             return False;
  14.         else:
  15.             for i in range(1,len(SD)-st):
  16.                 MD.append(SD[st+i]);
  17.                 re = Search(tag-SD[st],SD,MD,st+i)
  18.                 MD.pop();
  19.                 if re == True:
  20.                     continue;
  21.                 else: #re == False
  22.                     return True;
  23.             return True;
  24.     else:
  25.         return False;


  26. if __name__ == '__main__':
  27.     main();
复制代码
结果中存在一些重复的模式……
[1, 1, 3]
[1, 4]
[1, 4]
[2, 3]
[5]



评分

1

查看全部评分

发表于 2011-1-11 11:14 | 显示全部楼层
我只会循环着做,看来是铁定不能去阿里巴巴了
发表于 2011-1-11 12:01 | 显示全部楼层
回复 3 # mistuning 的帖子

但是直接遍历也许是在面试时能想出的,实现最快、实现起来BUG最少的办法了……
发表于 2012-5-16 14:37 | 显示全部楼层
算法的都是高人啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 14:21 , Processed in 0.059338 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表