1

与えられた配列:

a = [1, 2, 3, 4, 5, 6]

i要素をjある方向に回転させたいn。したがって、たとえば:

i = 2
j = 3
n = 1

回転aすると次のようになります。

new_a = [1, 2, 4, 3, 5, 6]

これは私が持っているものです:

def rotate_sub(a, i, j, n)
  return a[0...i] + a[i..j].rotate(n) + a[j+1..-1]
end

これを行うためのより良い方法はありますか?境界チェックがないかij配列の境界外にある可能性が非常に高いためです。

4

2 に答える 2

5

元の配列を変更する場合は、次のようにすることができます。

a[i..j] = a[i..j].rotate n

しかし、私はあなたがすでに持っている機能的な解決策が好きです。

于 2012-10-30T00:27:22.920 に答える
2

魔法のような方法はないと思うので、おそらく最も単純な方法が最適です。

def rotate_sub(a, i, j, n)
  a[0...i] + a[i..j].rotate(n) + a[j+1..-1] if i < j && j < a.size
end
于 2012-10-30T00:27:39.770 に答える