1/8バックル1日1質問〜回転アレイ

タイトルとして〜

配列が与えられたら、配列の要素をkの位置から右に移動します。ここで、kは非負の数です。

例1:
入力:[1,2,3,4,5,6,7]およびk = 3
出力:[5,6,7,1,2,3,4]
説明:
右に1ステップ回転します。 [7,1,2,3,4,5,6]
右に2ステップ回転:[6,7,1,2,3,4,5]
右に3ステップ回転:[5,6,7,1、2 、3,4]

例2:
入力:[-1、-100,3,99]およびk = 2
出力:[3,99、-1、-100]
説明:
1ステップ右に回転:[99、-1、-
100、3 ]右に2ステップ回転:[3,99、-1、-100]

この質問は最初は意味がわからないかもしれませんが、例を見ると理解できます。
まず第一に、私たちはそれをこのように考えることができます。直接列コード:

void rotate(int* nums, int numsSize, int k) {
    
    
    int a[numsSize];//定义需要的数组
    for (int i = 0; i < numsSize; ++i) {
    
    
        a[(i + k) % numsSize] = nums[i];//超出的从开始放
    }
    for (int i = 0; i < numsSize; ++i) {
    
    
        nums[i] = a[i];//遍历放回去
    }
}

上記のコードの意味は、新しい配列を使用して転送された番号を格納し、トラバーサル中に番号を返すことができるということです。
あなたが理解したいのであれば、この方法はまだ非常に簡単です。

おすすめ

転載: blog.csdn.net/FG_future/article/details/112381065