[a,b,c]的三元组满足a + b + c <1。 d

时间:2014-06-19 05:36:16

标签: algorithm

  

给定一个包含一百万个整数值和一个给定值d的数组A,找到所有三元组a + b + c <= d例如,让A = {1,2,3,4,5,6,7}d = 7,可能的三元组是{{ 1}}

     

还假设一个数组中的多个数组不能多次使用。因此[1,2,3] [1,2,4]不能是有效的三元组。

问题的第二部分说找到四倍[a,b,c,d]使得[1,1,1]仍然有效。这里没有给出d,它是一个数组元素,就像a,b和c

一样

以上问题似乎已在Google面试中提出

3 个答案:

答案 0 :(得分:2)

对数组进行排序并获取d的值 对全部 逐个跟踪每个元素。在第一个元素和第三个元素之间设置“a”的值。 然后对doublets应用相同的东西(找到第一个元素和'd'之间的总和为&lt; =(d-a))的所有双峰(b,c)

答案 1 :(得分:2)

这样的事情:

for i in 2..n-1
  for j in 1..i-1
     for k in 0..j-1
        if A[i]+A[j]+A[k] <= d
          print A[i], A[j], A[k]

这里n是A中的整数。如果A中的整数不唯一,则必须首先创建唯一列表。如果首先对A进行排序,则有很多优化空间。

答案 2 :(得分:1)

一种解决方案是搜索大约O(N ^ 2)中的所有元素。为此你需要一个数组,如果你的元素小于一百万,其中出现[i] = 1,只有当我出现在A中时。如果元素大于100万,你可以使用哈希表。现在,您可以使用a和b迭代数组。因为你有d,你知道d-a有多少,你知道如果出现[d-a-b] = 1那么c将是d-a-b,或者是最接近它的那个出现[element] = 1的较小元素。 对于哈希表,这个想法是一样的,你只需要更改c的搜索。