0

今日は、均衡指数の問題に取り組むのに少し時間を費やしました (ここで説明します) 。

独自のソリューション (多数の場合はパフォーマンスが悪い) を作成した後、満点になるソリューションを見つけることにしました。私はこれを見つけました(Codilityスコアは100/100です):

  def equi(a)
    left, right = 0, a.inject(0, &:+)
    indices = []
    a.each_with_index do |val, i|
      right -= val

      indices << i if right == left

      left += val
    end
    indices
  end

私が理解していないのは、メソッドの先頭にある並列割り当てと注入の使用です。これが何をしているのか説明できる人はいますか?

どうもありがとう!ストゥ

4

2 に答える 2

2

に 0 を代入し、の要素leftの合計をに代入します。そうしないと空の配列が返されるため、引数 0 が存在します。合計に使用される短縮形はSymbol#to_procであり、引数としてシンボルを直接受け取るため不要です- 。arightnilinjectinject(0, :+)

于 2012-06-23T11:27:23.757 に答える
0

それは配列の単なる合計です:

>> ar = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>> ar.inject(0, &:+)
=> 55 
# or a shorter version
>> ar.inject(&:+)
=> 55

メソッドのドキュメントを実際に読む必要があります。Enumerable#injectそれはすべてを説明します。

于 2012-06-23T11:25:12.067 に答える