《面试必刷TOP101》模拟篇

BM97 旋转数组

很容易想到三次反转即可满足题目的要求

唯一需要注意的就是m需要取模,因为当移动的次数大于数组的长度时候,其实就相当于向右移动了m%n次。

public int[] solve (int n, int m, int[] a) {
        
        m = m%n;
        // 0 - n
        reverse(a,0,n-1);
        // 0 - m
        reverse(a,0,m-1);
        // m - n
        return reverse(a,m,n-1);
       
        
    }
    private int[] reverse(int[] a,int start,int end){
        while(start < end){
            int tmp = a[start];
            a[start] = a[end];
            a[end] = tmp;
            start++;
            end--;
        }
        return a;
    }