0

問題は、合計がゼロになる(提供された)3つの数値がいくつあるかということです。

このブルートフォースメソッド(下記)をルビーでどのように実装するのか疑問に思っていますか?これの主な側面は次のとおりです。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 に答える