circularArrayRotationアルゴリズムルビー
概要
私はハッカーランクを使用していますが、なぜ私のRubyコードが20ほどのテストケースのうち1つのテストケースでしか機能しないのか理解できません。質問は次のとおりです。
これが私のコードです:
def circularArrayRotation(a, k, queries)
q = []
while k >= 1
m = a.pop()
a.unshift m
k = k - 1
end
for i in queries do
v = a[queries[i]]
q.push v
end
return q
end
サンプルテキストの場合にのみ機能しますが、理由がわかりません。ご協力いただきありがとうございます。
解決策
ベンチマークは実行していませんが、これは適切な名前の Array.rotate() メソッドの仕事のようです。
def index_at_rotation (array, num_rotations, queries)
array = array.rotate(-num_rotations)
queries.map {|q| array[q]}
end
a = [1, 2, 3]
k = 2
q = [0,1, 2]
index_at_rotation(a, k, q)
#=> [2, 3, 1]
負の回転値と nil 結果も処理します。
a = [1, 6, 9, 11]
k = -1
q = (1..4).to_a
index_at_rotation(a, k, q)
#=> [9, 11, 1, nil]