来讨教个面试题# JobHunting - 待字闺中l*r2018-03-16 07:031 楼有3个超大的数组A,B,C,例如每个数组都1T的数据量而且没有排序,要求找出所有的(i,j,k) 满足条件A[i]+B[j]+c[k]=1000这个改怎么做最优?
l*r2018-03-16 07:033 楼A,B也外排一下然后binary search?【在 d******b 的大作中提到】: 1000太小,1T太大,所以只要 有三组 1000个桶。然后计数,剩下的就是排列组合问题: 了。
o*r2018-03-16 07:034 楼1T的数字?我觉得可以先去一下重复的,去重复的时候顺便桶排序一下变成一个数出现多少次。之后要处理的就很少了。【在 l*********r 的大作中提到】: 有3个超大的数组A,B,C,例如每个数组都1T的数据量而且没有排序,要求找出所有的: (i,j,k) 满足条件A[i]+B[j]+c[k]=1000: 这个改怎么做最优?
l*r2018-03-16 07:036 楼都是int类型【在 z*********n 的大作中提到】: 条件太少了,数据类型是什么?short,integer, long(long), 这个不同,方法自: 然不同。
p*r2018-03-16 07:037 楼这就是个3sum题,你不用管它大不大,多少T既然没排序,扫描一遍是跑不掉的。优化方面可以考虑的是:#1 先扫描一遍:把的值先排除#2 去重然后排序【在 l*********r 的大作中提到】: 有3个超大的数组A,B,C,例如每个数组都1T的数据量而且没有排序,要求找出所有的: (i,j,k) 满足条件A[i]+B[j]+c[k]=1000: 这个改怎么做最优?
z*n2018-03-16 07:038 楼int32?那简单了,不用排序,直接建个表查表就行了,也就1G额外空间--处理3T数据,开了1G空间,怎么说都不过份吧?int32也就只能表示4G个unique的数,一个数据集直接开4G bit(500M bytes)的空间,扫一遍,用第i bit表示i+INT_MIN这个int在数据集中存在与否。也就是用500M空间表示了1T数据,而且还能O(1)时间查询一个整数存在与否。懒得继续码字了,这个字典都给建好了,剩下的该怎么做应该不用多废话了吧。【在 l*********r 的大作中提到】: 都是int类型
l*r2018-03-16 07:039 楼double 咋整?1G【在 z*********n 的大作中提到】: : int32?: 那简单了,不用排序,直接建个表查表就行了,也就1G额外空间--处理3T数据,开了1G: 空间,怎么说都不过份吧?: int32也就只能表示4G个unique的数,一个数据集直接开4G bit(500M bytes)的空间: ,扫一遍,用第i bit表示i+INT_MIN这个int在数据集中存在与否。也就是用500M空间: 表示了1T数据,而且还能O(1)时间查询一个整数存在与否。: 懒得继续码字了,这个字典都给建好了,剩下的该怎么做应该不用多废话了吧。
z*n2018-03-16 07:0310 楼我是不是提前先问你这是啥数据类型了?是不是说了不同类型手法不一样。然后你告诉我是int我码了七行字解了后你啥别的不说只回仨字“double咋整”?自己琢磨吧。【在 l*********r 的大作中提到】: double 咋整?: : 1G
H*52018-03-16 07:0311 楼非double和double难度完全不是一个数量级,可以另外开一贴: double 咋整?: 1G【在 l*********r 的大作中提到】: double 咋整?: : 1G
c*t2018-03-16 07:0312 楼bitmap怎么处理重复数据?1G【在 z*********n 的大作中提到】: : 我是不是提前先问你这是啥数据类型了?: 是不是说了不同类型手法不一样。: 然后你告诉我是int: 我码了七行字解了后你啥别的不说只回仨字“double咋整”?: 自己琢磨吧。
c*t2018-03-16 07:0315 楼题目要求找出所有的(i,j,k) 满足条件A[i]+B[j]+c[k]=1000【在 z*********n 的大作中提到】: : 天然去重啊?还需要如何处理。