Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで配列を右にk回転させる方法【スライスで簡単実装】

配列の右回転とは?

配列Aが与えられたとき、それを右にkステップ回転することを考えます。例えば、配列 A = [5, 7, 3, 6, 8, 1, 5, 4]、k = 3 の場合、出力は [1, 5, 4, 5, 7, 3, 6, 8] となります。

各ステップでの配列の変化は以下の通りです。

  • 1回転後:[4, 5, 7, 3, 6, 8, 1, 5]
  • 2回転後:[5, 4, 5, 7, 3, 6, 8, 1]
  • 3回転後:[1, 5, 4, 5, 7, 3, 6, 8]

つまり、1回転ごとに末尾の要素が先頭に移動し、残りの要素が一つずつ後ろにずれていくイメージです。

解法のアプローチ

この問題は、Pythonのスライスを使うことで非常にシンプルに解けます。手順は以下の通りです。

  • 配列のサイズを n とします
  • k = k mod n を計算します(kが配列サイズより大きい場合への対応)
  • 配列を「末尾からk個の要素」+「先頭から n−k 個の要素」を連結したもので置き換えます

k %= n が必要な理由は、kが配列の長さ以上の場合でも正しく動作させるためです。例えば長さ8の配列を10回転させると、結果は2回転した場合と同じになります。

実装例

class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        k %= n
        nums[:] = nums[n-k:] + nums[:n-k]

nums = [5,7,3,6,8,1,5,4]
ob1 = Solution()
ob1.rotate(nums, 3)
print(nums)

入力

nums = [5,7,3,6,8,1,5,4]
k = 3

出力

[1,5,4,5,7,3,6,8]

コードのポイント

スライス代入でin-place変更を実現

この実装で重要なのは nums[:] という書き方です。これはスライス代入と呼ばれる手法で、新しいリストオブジェクトを作成する代わりに、元のリストの中身を直接置き換えます。LeetCodeなどのコーディング試験では「戻り値を返さず、配列をインプレース(in-place)で変更せよ」という制約が課されることが多く、その場合にこの書き方が必須となります。

計算量について

時間計算量は O(n)、追加のメモリ使用量も O(n) です。さらに効率化したい場合は、反転アルゴリズム(①配列全体を反転 → ②前半k個を反転 → ③残りの部分を反転)を使うことで、O(1)の追加メモリで回転を行うことも可能です。

  1. Pythonの文字列スライスで文字列を回転させる方法

    文字列が与えられたとき、その文字列を2つの方向にスライスして回転させるのが本記事の目的です。1つは時計回り(右回転)、もう1つは反時計回り(左回転)です。1. 与えられた文字列を d 要素分だけ左(反時計回り)に回転させます(d <= n)。2. 与えられた文字列を d 要素分だけ右(時計回り)に回転させます(d <= n)。実行例Input: string = pythonprogram d = 2 Output: Left Rotation: thonprogrampy Right Rotation: ampythonprogrアルゴリズムStep 1: 文字列を入力する。 S

  2. 配列を1つずつ時計回りに循環回転させるPythonプログラム

    ユーザーが入力した配列を受け取り、その要素全体を時計回りに1つずつ循環的に回転させるのが本記事の目的です。最後尾の要素が先頭に移動し、それ以外の要素はそれぞれ後ろへ1つずつシフトされます。 実行例 入力:A = [1, 2, 3, 4, 5] 出力:[5, 1, 2, 3, 4] この例では、末尾の「5」が先頭に移動し、「1〜4」はそれぞれ1つ後ろへずれています。 アルゴリズムの手順 ステップ1:配列の要素を入力する。 ステップ2:配列の最後の要素を変数 x に保存する。 ステップ3:すべての要素を1つ後ろの位置へシフトする。 ステップ4:配列の先頭要素を x で置き換える。 ポイント