0

问题是 - 有多少三个数字(提供的)总和为零?

我想知道,如何在 ruby​​ 中实现这种蛮力方法(如下)?主要方面是:在 for 循环的地方使用什么更好?次?a - 是整数数组,即提供的数据

int N = a.length;
int count = 0;
for(int i = 0; i<N; i++)
  for(int j = i+1; j<N; j++)
    for(int k = j+ 1; k<N; k++)
      if (a[i] + a[j] + a[k] == 0 )
        count++;
return count;
4

2 回答 2

4

怎么样:

a.combination(3).count{|x,y,z| x+y+z==0}

但是我在这里没有与 Rails 的联系;)

于 2012-10-24T19:21:48.390 回答
1
def two_sum(nums, target)
    seen = Hash.new
    result = []
    nums.each_with_index do |e, i|
        if seen.has_key?(target-e)
            result << [seen[target-e], i]
        else
            seen[e] = i
        end
    end
    return result
end

def three_sum(nums)
    nums.sort!
    seen = Hash.new
    results = []
    nums.each_with_index do |e, i|
        if !seen.has_key?(e)
            two_sum(nums[i + 1 .. -1], 0 - e).each do |pair|
                results << [e] + pair.map{ |j| nums[j + i + 1] }
            end
            seen[e] = i
        end
    end
    return results.count
end
于 2020-04-15T16:25:38.567 回答