一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 990|回复: 6
收起左侧

[算法题] 3 sum

[复制链接] |试试Instant~ |关注本帖
devilsapple 发表于 2014-2-3 11:54:55 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
看地理帖子上说A的面试问了3sum的hashmap和不hash的做法,求问各位大神不hash怎么做呢?
hxtang 发表于 2014-2-5 02:22:01 | 显示全部楼层
遍历最小的number,对比它大的数做不用hash的two-sum,就是从两头往中间扫,线性时间的。
回复 支持 反对

使用道具 举报

co89757 发表于 2014-2-6 00:47:13 | 显示全部楼层
convert it to 2sum which is O(n)
回复 支持 反对

使用道具 举报

nerozeng 发表于 2014-2-7 14:16:22 | 显示全部楼层
把第一个数选好后,剩下的部分从两头往中间扫即可
回复 支持 反对

使用道具 举报

一地鸡毛 发表于 2014-2-8 09:47:01 | 显示全部楼层
。。。这个题目。。。歧义不小
回复 支持 反对

使用道具 举报

axaxsundu 发表于 2014-2-9 23:43:53 | 显示全部楼层
那hash怎么做呢。。以前都是不hash做的。。
回复 支持 反对

使用道具 举报

yxyxyx 发表于 2014-2-12 05:52:14 | 显示全部楼层
不论hash与否,关键都是为了查重。

比如这样一个数组 1 2 2 3 4,target是 7, 那么在sort好之后,a = 1, b = 靠左的2,c = 4,这是一个解;找到这个解之后需要把b的位置向右移动,c的位置向左移动。
问题在于,移动c和b的时候要保证,在移动之后,b和c不能还都是原来的值。这个就是不用hash的做法的关键:它会让b往右移动两位直到找到下一个不是2的数,也就是3。这样才能保证不会最终的结果里面没有重复。

用hash的做法就不用担心这个问题,因为hashset本身就可以用来查重。每次找到一个解就看hashset里面这个解有没有出现过,没出现过就放到最终解里面,出现过了就不放了。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-6 19:08

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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